collection_update_job.rb 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. class CollectionUpdateJob < ApplicationJob
  2. include HasActiveJobLock
  3. def lock_key
  4. # "CollectionUpdateJob/:model"
  5. "#{self.class.name}/#{arguments[0]}"
  6. end
  7. def perform(model)
  8. model = model.safe_constantize
  9. return if model.blank?
  10. assets = {}
  11. all = []
  12. model.order(id: :asc).find_each do |record|
  13. assets = record.assets(assets)
  14. all.push record.attributes_with_association_ids
  15. end
  16. return if all.blank?
  17. Sessions.list.each do |client_id, data|
  18. next if client_id.blank?
  19. user_id = data&.dig(:user, 'id')
  20. next if user_id.blank?
  21. # check permission based access
  22. if model.collection_push_permission_value.present?
  23. user = User.lookup(id: user_id)
  24. next if !user&.permissions?(model.collection_push_permission_value)
  25. end
  26. Rails.logger.debug { "push assets for push_collection #{model} for user #{user_id}" }
  27. Sessions.send(client_id, {
  28. data: assets,
  29. event: 'loadAssets',
  30. })
  31. Rails.logger.debug { "push push_collection #{model} for user #{user_id}" }
  32. Sessions.send(client_id, {
  33. event: 'resetCollection',
  34. data: {
  35. model.to_app_model => all,
  36. },
  37. })
  38. end
  39. end
  40. end