Class: Panda::Core::PresenceService
- Inherits:
-
Object
- Object
- Panda::Core::PresenceService
- Defined in:
- app/services/panda/core/presence_service.rb
Class Method Summary collapse
- .cleanup_stale! ⇒ Object
- .current_editors(resource) ⇒ Object
- .record_presence(resource, user_id) ⇒ Object
- .remove_presence(resource, user_id) ⇒ Object
Class Method Details
.cleanup_stale! ⇒ Object
44 45 46 |
# File 'app/services/panda/core/presence_service.rb', line 44 def self.cleanup_stale! Presence.stale(Presence::PRESENCE_TTL).delete_all end |
.current_editors(resource) ⇒ Object
31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'app/services/panda/core/presence_service.rb', line 31 def self.current_editors(resource) Presence .for_resource(resource) .active(Presence::PRESENCE_TTL) .includes(:user) .map do |presence| { user_id: presence.user_id, user_name: presence.user.name.presence || presence.user.email } end end |
.record_presence(resource, user_id) ⇒ Object
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# File 'app/services/panda/core/presence_service.rb', line 6 def self.record_presence(resource, user_id) attrs = { presenceable_type: resource.class.name, presenceable_id: resource.id, user_id: user_id } result = Presence.upsert( attrs.merge(last_seen_at: Time.current), unique_by: %i[presenceable_type presenceable_id user_id], returning: %w[id] ) record_id = result.first&.fetch("id") { raise "Upsert did not return an ID" } Presence.find(record_id) end |
.remove_presence(resource, user_id) ⇒ Object
23 24 25 26 27 28 29 |
# File 'app/services/panda/core/presence_service.rb', line 23 def self.remove_presence(resource, user_id) Presence.where( presenceable_type: resource.class.name, presenceable_id: resource.id, user_id: user_id ).delete_all end |