6a71856b3d
* Add JSON events API endpoint * Add regression test for event particulars defaults * Move JSON events API to a dedicated ActivitiesController The events endpoint served both the HTML day timeline and the JSON API feed, but the two paths shared no data or behavior — the HTML side uses DayTimelinesScoped while the JSON side built its own query. Splitting into ActivitiesController gives the API its own home at GET /:account/activities.json without dragging in the timeline before_actions. Also preloads comment creator in Event.preloaded to avoid an N+1 when rendering comment eventables in the JSON feed.
48 lines
1.3 KiB
Ruby
48 lines
1.3 KiB
Ruby
class Event < ApplicationRecord
|
|
include Notifiable, Particulars, Promptable
|
|
|
|
belongs_to :account, default: -> { board.account }
|
|
belongs_to :board
|
|
belongs_to :creator, class_name: "User"
|
|
belongs_to :eventable, polymorphic: true
|
|
|
|
has_many :webhook_deliveries, class_name: "Webhook::Delivery", dependent: :delete_all
|
|
|
|
scope :chronologically, -> { order created_at: :asc, id: :desc }
|
|
scope :reverse_chronologically, -> { order created_at: :desc, id: :desc }
|
|
scope :for_creators, ->(ids) { where(creator_id: ids) if ids.present? }
|
|
scope :for_boards, ->(ids) { where(board_id: ids) if ids.present? }
|
|
scope :preloaded, -> {
|
|
includes(:creator, :board, {
|
|
eventable: [
|
|
:creator, :goldness, :closure, :image_attachment,
|
|
{ rich_text_body: :embeds_attachments },
|
|
{ rich_text_description: :embeds_attachments },
|
|
{ card: [ :goldness, :closure, :image_attachment ] }
|
|
]
|
|
})
|
|
}
|
|
|
|
after_create -> { eventable.event_was_created(self) }
|
|
after_create_commit :dispatch_webhooks
|
|
|
|
delegate :card, to: :eventable
|
|
|
|
def action
|
|
super.inquiry
|
|
end
|
|
|
|
def notifiable_target
|
|
eventable
|
|
end
|
|
|
|
def description_for(user)
|
|
Event::Description.new(self, user)
|
|
end
|
|
|
|
private
|
|
def dispatch_webhooks
|
|
Event::WebhookDispatchJob.perform_later(self)
|
|
end
|
|
end
|