Class: PopulateVersionReferences

Inherits:
Object
  • Object
show all
Defined in:
app/services/populate_version_references.rb

Instance Method Summary collapse

Instance Method Details

#processObject



3
4
5
6
7
8
9
10
# File 'app/services/populate_version_references.rb', line 3

def process
  # process_model 'ProductFilter'
  # process_model 'CustomerRecord'
  # process_model 'EmployeeRecord'
  # process_model 'SupportCaseParticipant'
  # process_model 'Delivery'
  process_model 'InventoryCommit'
end

#process_model(item_type) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'app/services/populate_version_references.rb', line 12

def process_model(item_type)
  versions = RecordVersion.where(reference_data:nil, item_type: item_type).includes(:item)
  total_count = versions.size
  count = 1
  versions.find_in_batches(batch_size: 250) do |versions|
    RecordVersion.transaction do
      versions.each do |v|
        count += 1
        puts "[#{count} / #{total_count}] #{item_type} #{v.id} processing"
        if v.item
          reference_data = v.item.audit_reference_data&.compact&.presence
        elsif v.object_changes.present? && (reference_fields = v.item_type.constantize.reference_data).present? # Try from object changes
          reference_data = {}
          reference_fields.each do |field_name|
            data = v.object_changes[field_name]&.last || v.object_changes[field_name]&.first
            reference_data[field_name] = data
          end
          reference_data = reference_data&.compact&.presence
        else #No reference data, this is a lost sheep or a useless record, kill it
          v.destroy
        end

        if reference_data.present?
          v.update_column(:reference_data, reference_data)
        end
      end
    end
  end
end