Add antenna elements limit

This commit is contained in:
KMY 2023-08-20 09:56:00 +09:00
parent db6d1f5c75
commit e336542063
7 changed files with 50 additions and 0 deletions

View file

@ -30,6 +30,10 @@ class Antenna < ApplicationRecord
include Expireable
LIMIT = 30
DOMAINS_PER_ANTENNA_LIMIT = 20
ACCOUNTS_PER_ANTENNA_LIMIT = 100
TAGS_PER_ANTENNA_LIMIT = 50
KEYWORDS_PER_ANTENNA_LIMIT = 100
has_many :antenna_domains, inverse_of: :antenna, dependent: :destroy
has_many :antenna_tags, inverse_of: :antenna, dependent: :destroy

View file

@ -14,4 +14,17 @@
class AntennaAccount < ApplicationRecord
belongs_to :antenna
belongs_to :account
validate :duplicate_account
validate :limit_per_antenna
private
def duplicate_account
raise Mastodon::ValidationError, I18n.t('antennas.errors.duplicate_account') if AntennaAccount.exists?(antenna_id: antenna_id, account_id: account_id, exclude: exclude)
end
def limit_per_antenna
raise Mastodon::ValidationError, I18n.t('antennas.errors.limit.accounts') if AntennaAccount.where(antenna_id: antenna_id).count >= Antenna::ACCOUNTS_PER_ANTENNA_LIMIT
end
end

View file

@ -15,8 +15,15 @@ class AntennaDomain < ApplicationRecord
belongs_to :antenna
validate :duplicate_domain
validate :limit_per_antenna
private
def duplicate_domain
raise Mastodon::ValidationError, I18n.t('antennas.errors.duplicate_domain') if AntennaDomain.exists?(antenna_id: antenna_id, name: name, exclude: exclude)
end
def limit_per_antenna
raise Mastodon::ValidationError, I18n.t('antennas.errors.limit.domains') if AntennaDomain.where(antenna_id: antenna_id).count >= Antenna::DOMAINS_PER_ANTENNA_LIMIT
end
end

View file

@ -14,4 +14,17 @@
class AntennaTag < ApplicationRecord
belongs_to :antenna
belongs_to :tag
validate :duplicate_tag
validate :limit_per_antenna
private
def duplicate_tag
raise Mastodon::ValidationError, I18n.t('antennas.errors.duplicate_tag') if AntennaTag.exists?(antenna_id: antenna_id, tag_id: tag_id, exclude: exclude)
end
def limit_per_antenna
raise Mastodon::ValidationError, I18n.t('antennas.errors.limit.tags') if AntennaTag.where(antenna_id: antenna_id).count >= Antenna::TAGS_PER_ANTENNA_LIMIT
end
end