BathHacked/energy-sparks

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

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
module Amr
  class CsvParserAndUpserter
    attr_reader :inserted_record_count, :upserted_record_count

    def initialize(config_to_parse_file, file_name_to_import)
      @file_name = file_name_to_import
      @config = config_to_parse_file
      @inserted_record_count = 0
      @upserted_record_count = 0
    end

    def perform
      Rails.logger.info "Loading: #{@config.local_bucket_path}/#{@file_name}"
      amr_data_feed_import_log = AmrDataFeedImportLog.create(amr_data_feed_config_id: @config.id, file_name: @file_name, import_time: DateTime.now.utc)

      begin
        amr_reading_data = DataFileToAmrReadingData.new(@config, "#{@config.local_bucket_path}/#{@file_name}").perform

        if amr_reading_data.valid?
          ProcessAmrReadingData.new(amr_data_feed_import_log).perform(amr_reading_data.valid_records, amr_reading_data.warnings)
        else
          amr_data_feed_import_log.update(error_messages: amr_reading_data.error_messages_joined, records_imported: 0, records_updated: 0)
        end
      rescue DataFeedException => e
        # ensure that unexpected validation errors are recorded in the import log
        amr_data_feed_import_log.update(error_messages: e.message, records_imported: 0, records_updated: 0)
        Rollbar.error(e, job: :import_all, config: @config.identifier)
      end

      @inserted_record_count = amr_data_feed_import_log.records_imported
      @updated_record_count = amr_data_feed_import_log.records_updated

      Rails.logger.info "Loaded: #{@config.local_bucket_path}/#{@file_name} records inserted: #{@inserted_record_count} records updated: #{@updated_record_count}"

      amr_data_feed_import_log
    end
  end
end