From a49d43d1121ac10f96d5a9cbf78112c707e7a59e Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sat, 5 Jan 2019 12:43:28 +0100 Subject: Add scheduled statuses (#9706) Fix #340 --- app/models/scheduled_status.rb | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 app/models/scheduled_status.rb (limited to 'app/models/scheduled_status.rb') diff --git a/app/models/scheduled_status.rb b/app/models/scheduled_status.rb new file mode 100644 index 000000000..c95470fc8 --- /dev/null +++ b/app/models/scheduled_status.rb @@ -0,0 +1,39 @@ +# frozen_string_literal: true + +# == Schema Information +# +# Table name: scheduled_statuses +# +# id :bigint(8) not null, primary key +# account_id :bigint(8) +# scheduled_at :datetime +# params :jsonb +# + +class ScheduledStatus < ApplicationRecord + include Paginable + + TOTAL_LIMIT = 300 + DAILY_LIMIT = 25 + + belongs_to :account, inverse_of: :scheduled_statuses + has_many :media_attachments, inverse_of: :scheduled_status, dependent: :destroy + + validate :validate_future_date + validate :validate_total_limit + validate :validate_daily_limit + + private + + def validate_future_date + errors.add(:scheduled_at, I18n.t('scheduled_statuses.too_soon')) if scheduled_at.present? && scheduled_at <= Time.now.utc + PostStatusService::MIN_SCHEDULE_OFFSET + end + + def validate_total_limit + errors.add(:base, I18n.t('scheduled_statuses.over_total_limit', limit: TOTAL_LIMIT)) if account.scheduled_statuses.count >= TOTAL_LIMIT + end + + def validate_daily_limit + errors.add(:base, I18n.t('scheduled_statuses.over_daily_limit', limit: DAILY_LIMIT)) if account.scheduled_statuses.where('scheduled_at::date = ?::date', scheduled_at).count >= DAILY_LIMIT + end +end -- cgit From 86f27b178c778f6e8ea8e3de938741cd62a20cfa Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sun, 6 Jan 2019 16:38:40 +0100 Subject: Fix deleting a scheduled status immediately deleting media attachments (#9728) --- app/models/scheduled_status.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app/models/scheduled_status.rb') diff --git a/app/models/scheduled_status.rb b/app/models/scheduled_status.rb index c95470fc8..27f0cbd28 100644 --- a/app/models/scheduled_status.rb +++ b/app/models/scheduled_status.rb @@ -17,7 +17,7 @@ class ScheduledStatus < ApplicationRecord DAILY_LIMIT = 25 belongs_to :account, inverse_of: :scheduled_statuses - has_many :media_attachments, inverse_of: :scheduled_status, dependent: :destroy + has_many :media_attachments, inverse_of: :scheduled_status, dependent: :nullify validate :validate_future_date validate :validate_total_limit -- cgit