# ends_at :datetime
# created_at :datetime not null
# updated_at :datetime not null
+# published_at :datetime
#
class Announcement < ApplicationRecord
scope :unpublished, -> { where(published: false) }
scope :published, -> { where(published: true) }
scope :without_muted, ->(account) { joins("LEFT OUTER JOIN announcement_mutes ON announcement_mutes.announcement_id = announcements.id AND announcement_mutes.account_id = #{account.id}").where('announcement_mutes.id IS NULL') }
- scope :chronological, -> { order(Arel.sql('COALESCE(announcements.starts_at, announcements.scheduled_at, announcements.created_at) ASC')) }
+ scope :chronological, -> { order(Arel.sql('COALESCE(announcements.starts_at, announcements.scheduled_at, announcements.published_at, announcements.created_at) ASC')) }
has_many :announcement_mutes, dependent: :destroy
has_many :announcement_reactions, dependent: :destroy
before_validation :set_all_day
before_validation :set_published, on: :create
- def published_at
- scheduled_at || created_at
- end
-
def time_range?
starts_at.present? && ends_at.present?
end
end
def set_published
- self.published = true if scheduled_at.blank? || scheduled_at.past?
+ return unless scheduled_at.blank? || scheduled_at.past?
+
+ self.published = true
+ self.published_at = Time.now.utc
end
end
def perform(announcement_id)
announcement = Announcement.find(announcement_id)
- announcement.update(published: true)
+
+ announcement.update(published: true, published_at: Time.now.utc, scheduled_at: nil) unless announcement.published?
payload = InlineRenderer.render(announcement, nil, :announcement)
payload = Oj.dump(event: :announcement, payload: payload)
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 2020_01_19_112504) do
+ActiveRecord::Schema.define(version: 2020_01_26_203551) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
t.datetime "ends_at"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
+ t.datetime "published_at"
end
create_table "backups", force: :cascade do |t|