metamaps/metamaps

View on GitHub
app/models/event.rb

Summary

Maintainability
A
0 mins
Test Coverage
# frozen_string_literal: true

class Event < ApplicationRecord
  KINDS = %w[user_present_on_map user_not_present_on_map
             conversation_started_on_map
             topic_added_to_map topic_moved_on_map topic_removed_from_map
             synapse_added_to_map synapse_removed_from_map
             topic_updated synapse_updated].freeze

  belongs_to :eventable, polymorphic: true
  belongs_to :map
  belongs_to :user

  scope :chronologically, (-> { order('created_at asc') })

  after_create :notify_webhooks!, if: :map

  validates :kind, inclusion: { in: KINDS }
  validates :eventable, presence: true

  def belongs_to?(this_user)
    user_id == this_user.id
  end

  def notify_webhooks!
    map.webhooks.each { |webhook| WebhookService.publish! webhook: webhook, event: self }
  end
  handle_asynchronously :notify_webhooks!
end