fb733b9a60
We are doing away with all the automated activity scoring, but for now lets just get rid of it for comments.
75 lines
2.3 KiB
Ruby
75 lines
2.3 KiB
Ruby
class Card < ApplicationRecord
|
|
include Assignable, Boostable, Colored, Engageable, Eventable, Golden,
|
|
Messages, Notifiable, Pinnable, Closeable, Scorable, Searchable, Staged,
|
|
Statuses, Taggable, Watchable
|
|
|
|
belongs_to :collection, touch: true
|
|
belongs_to :creator, class_name: "User", default: -> { Current.user }
|
|
|
|
has_many :notifications, dependent: :destroy
|
|
|
|
has_one_attached :image, dependent: :purge_later
|
|
|
|
after_save :track_due_date_change, if: :saved_change_to_due_on?
|
|
after_save :track_title_change, if: :saved_change_to_title?
|
|
after_create :assign_initial_stage
|
|
|
|
scope :reverse_chronologically, -> { order created_at: :desc, id: :desc }
|
|
scope :chronologically, -> { order created_at: :asc, id: :asc }
|
|
scope :latest, -> { order updated_at: :desc, id: :desc }
|
|
scope :in_collection, ->(collection) { where collection: collection }
|
|
|
|
scope :indexed_by, ->(index) do
|
|
case index
|
|
when "most_active" then ordered_by_activity
|
|
when "most_boosted" then ordered_by_boosts
|
|
when "newest" then reverse_chronologically
|
|
when "oldest" then chronologically
|
|
when "latest" then latest
|
|
when "stalled" then ordered_by_staleness
|
|
when "closed" then closed
|
|
end
|
|
end
|
|
|
|
scope :by_engagement_status, ->(status) do
|
|
case status.to_s
|
|
when "considering" then considering
|
|
when "doing" then doing.with_golden_first
|
|
end
|
|
end
|
|
|
|
def cache_key
|
|
[ super, collection&.name ].compact.join("/")
|
|
end
|
|
|
|
private
|
|
def track_due_date_change
|
|
if due_on.present?
|
|
if due_on_before_last_save.nil?
|
|
track_event("due_date_added", particulars: { due_date: due_on })
|
|
else
|
|
track_event("due_date_changed", particulars: { due_date: due_on })
|
|
end
|
|
elsif due_on_before_last_save.present?
|
|
track_event("due_date_removed")
|
|
end
|
|
end
|
|
|
|
def track_title_change
|
|
if title_before_last_save.present?
|
|
track_event("title_changed", particulars: {
|
|
old_title: title_before_last_save,
|
|
new_title: title
|
|
})
|
|
end
|
|
end
|
|
|
|
def assign_initial_stage
|
|
if workflow_stage = collection.workflow&.stages&.first
|
|
self.stage = workflow_stage
|
|
save! touch: false
|
|
track_event :staged, stage_id: workflow_stage.id, stage_name: workflow_stage.name
|
|
end
|
|
end
|
|
end
|