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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
# File 'app/jobs/export_json_bulk_job.rb', line 9
def perform(request, current_user, query_params, export_service)
logger.debug("\n\n Background Job: ♞")
logger.debug("Request: #{request.inspect}")
logger.debug("User: #{current_user.inspect}")
logger.debug("Query: #{query_params.inspect}")
logger.debug("Export Service: #{export_service.inspect}")
logger.debug("\n\n")
ActionCable.server.broadcast("export_channel", {data: "Hello from Export Job!"})
document_ids = query_params[:ids] || crawl_query(request, query_params)
logger.debug("Document Ids: #{document_ids}")
documents = export_service.call(document_ids)
begin
@json_array = []
documents.each do |doc|
json_output = Admin::DocumentsController.render("_json_file.jbuilder",
locals: {document: doc})
json_obj = JSON.parse(json_output)
Rails.logger.debug json_obj
json_obj.compact!
@json_array << JSON.pretty_generate(json_obj)
rescue NoMethodError => e
Rails.logger.debug { "==== Error! - #{doc.friendlier_id} ====" }
Rails.logger.debug e.inspect
next
end
end
@tempfile = Tempfile.new(["export-#{Time.zone.today}", ".json"]).tap do |file|
file.write("[#{@json_array.join(",")}]")
end
@tempfile.rewind
notification = ExportNotification.with(message: "JSON FILE |#{ActionController::Base.helpers.number_with_delimiter(documents.size)} rows|JSON")
notification.deliver(current_user)
notification.record.file.attach(io: @tempfile, filename: "geomg-export-#{Time.zone.today}.json",
content_type: "application/json")
ActionCable.server.broadcast("export_channel", {
data: "Notification ready!",
actions: [
{
method: "RefreshNotifications",
payload: current_user.notifications.unread.count
}
]
})
end
|