Module: Ocpp::Rails::ConnectorStatusBackfill

Defined in:
app/services/ocpp/rails/connector_status_backfill.rb

Overview

Moves per-connector status from the pre-0.3.0 metadata convention (connector__status / _error_code / _updated_at keys on ChargePoint#metadata) into the ocpp_connector_statuses table. Idempotent; rows the station has written since the upgrade win over legacy metadata.

Constant Summary collapse

LEGACY_KEY =
/\Aconnector_(\d+)_(status|error_code|updated_at)\z/

Class Method Summary collapse

Class Method Details

.runObject



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'app/services/ocpp/rails/connector_status_backfill.rb', line 11

def self.run
  Ocpp::Rails::ChargePoint.find_each do |charge_point|
     = charge_point. || {}
    legacy = .select { |key, _| key.to_s.match?(LEGACY_KEY) }
    next if legacy.empty?

    connector_ids(legacy).each do |connector_id|
      status = legacy["connector_#{connector_id}_status"]
      next unless status

      record = charge_point.connector_statuses.find_or_initialize_by(connector_id: connector_id)
      next if record.persisted?

      record.update!(status: status, error_code: legacy["connector_#{connector_id}_error_code"])
    end

    charge_point.update!(metadata: .except(*legacy.keys))
  end
end