Class: SpreeCmCommissioner::Exports::OperatorGuestJsonGzip

Inherits:
SpreeCmCommissioner::Export show all
Defined in:
app/models/spree_cm_commissioner/exports/operator_guest_json_gzip.rb

Instance Method Summary collapse

Methods inherited from SpreeCmCommissioner::Export

#enqueue_export, #exported_file_name, #exported_file_url, #set_uuid

Instance Method Details

#exportObject

override



9
10
11
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'app/models/spree_cm_commissioner/exports/operator_guest_json_gzip.rb', line 9

def export # rubocop:disable Metrics/AbcSize
  track_messages = []
  track_messages << "Export started at #{Time.current.iso8601}"
  update(status: :progress, track_messages: track_messages)

  guests = SpreeCmCommissioner::GuestSearcherQuery.new(event_id: exportable_id).call

  track_messages << "Eager loaded started at #{Time.current.iso8601}"
  update(track_messages: track_messages)

  guests = guests.includes(
    :occupation,
    :user,
    check_ins: %i[check_in_by check_in_session],
    line_item: [:variant, { order: :bill_address }]
  )

  track_messages << "Eager loaded ended at #{Time.current.iso8601}"
  update(track_messages: track_messages)

  hash = SpreeCmCommissioner::V2::Operator::GuestSerializer.new(
    guests,
    { include: resource_includes }
  ).serializable_hash

  track_messages << "Serialization completed at #{Time.current.iso8601}"
  update(track_messages: track_messages)

  file_name = "exports_operator_guest_#{id}.json.gz"
  json_gzip = ActiveSupport::Gzip.compress(JSON.generate(hash))

  exported_file.attach(
    io: StringIO.new(json_gzip),
    filename: file_name,
    content_type: 'application/gzip'
  )

  track_messages << "Completed at #{Time.current.iso8601}"
  update(
    file_size_bytes: json_gzip.bytesize,
    guests_count: guests.size,
    status: :done,
    track_messages: track_messages
  )
rescue StandardError => e
  CmAppLogger.error(label: "#{self.class.name}#export", data: { export_id: id, error: e.message, backtrace: e.backtrace })

  track_errors = []
  track_errors << "Error: #{e.message} at #{Time.current.iso8601}"
  track_errors << e.backtrace.take(5).join("\n")

  update(status: :failed, track_errors: track_errors)
end