BathHacked/energy-sparks

View on GitHub
app/services/amr/process_amr_reading_data.rb

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
module Amr
  class ProcessAmrReadingData
    def initialize(amr_data_feed_import_log)
      @amr_data_feed_import_log = amr_data_feed_import_log
      @meter_data = Meter.hash_of_meter_data
    end

    def perform(valid_readings, warning_readings)
      DataFeedUpserter.new(valid_readings, @amr_data_feed_import_log).perform
      create_warnings(warning_readings) unless warning_readings.empty?
      @amr_data_feed_import_log
    end

    private

    def create_warnings(warnings)
      updated_warnings = warnings.map do |warning|
        {
          amr_data_feed_import_log_id: @amr_data_feed_import_log.id,
          warning_types: warning[:warnings].map { |warning_symbol| AmrReadingWarning::WARNINGS.key(warning_symbol.to_sym) },
          created_at: DateTime.now.utc,
          updated_at: DateTime.now.utc,
          mpan_mprn: warning[:mpan_mprn],
          school_id: school_id(warning),
          fuel_type: fuel_type(warning),
          reading_date: warning[:reading_date],
          readings: warning[:readings]
         }
      end
      AmrReadingWarning.insert_all(updated_warnings)
    end

    def school_id(warning)
      @meter_data[warning[:mpan_mprn]][:school_id] if @meter_data.key?(warning[:mpan_mprn])
    end

    def fuel_type(warning)
      @meter_data[warning[:mpan_mprn]][:fuel_type] if @meter_data.key?(warning[:mpan_mprn])
    end
  end
end