Class: Nexo::FolderSyncJob

Inherits:
BaseJob
  • Object
show all
Defined in:
app/jobs/nexo/folder_sync_job.rb

Instance Method Summary collapse

Instance Method Details

#perform(folder) ⇒ Object

TODO!: limit concurrency



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'app/jobs/nexo/folder_sync_job.rb', line 4

def perform(folder)
  protocol_service = ServiceBuilder.instance.build_protocol_service(folder)
  if folder.external_identifier.blank?
    response = protocol_service.insert_calendar(folder)
    folder.update(external_identifier: response.id)
  else
    protocol_service.update_calendar(folder)
  end

  policies = PolicyService.instance.policies_for(folder)
  Nexo.logger.debug { "Found #{policies.length} policies" }
  # flat_map should be equivalent to:
  #   policies.map(&:synchronizable_queries).flatten(1)
  queries = policies.flat_map(&:synchronizable_queries)
  Nexo.logger.debug { "Found #{queries.length} queries" }

  GoodJob::Bulk.enqueue do
    queries.each do |query|
      # TODO: avoid calling more than once per synchronizable
      query.find_each do |synchronizable|
        Nexo.logger.debug { "Processing synchronizable: #{synchronizable}" }

        folder_service.find_element_and_sync(folder, synchronizable)
      end
    end
  end
  Nexo.logger.debug { "Finished processing queries" }
end