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

@ -21,6 +21,8 @@ class Api::V1::Antennas::KeywordsController < Api::BaseController
new_keywords << keyword new_keywords << keyword
end end
raise Mastodon::ValidationError, I18n.t('antennas.errors.limit.keywords') if new_keywords.size > Antenna::KEYWORDS_PER_ANTENNA_LIMIT
@antenna.update!(keywords: new_keywords, any_keywords: new_keywords.empty?) @antenna.update!(keywords: new_keywords, any_keywords: new_keywords.empty?)
render_empty render_empty

View file

@ -30,6 +30,10 @@ class Antenna < ApplicationRecord
include Expireable include Expireable
LIMIT = 30 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_domains, inverse_of: :antenna, dependent: :destroy
has_many :antenna_tags, inverse_of: :antenna, dependent: :destroy has_many :antenna_tags, inverse_of: :antenna, dependent: :destroy

View file

@ -14,4 +14,17 @@
class AntennaAccount < ApplicationRecord class AntennaAccount < ApplicationRecord
belongs_to :antenna belongs_to :antenna
belongs_to :account 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 end

View file

@ -15,8 +15,15 @@ class AntennaDomain < ApplicationRecord
belongs_to :antenna belongs_to :antenna
validate :duplicate_domain validate :duplicate_domain
validate :limit_per_antenna
private
def duplicate_domain def duplicate_domain
raise Mastodon::ValidationError, I18n.t('antennas.errors.duplicate_domain') if AntennaDomain.exists?(antenna_id: antenna_id, name: name, exclude: exclude) raise Mastodon::ValidationError, I18n.t('antennas.errors.duplicate_domain') if AntennaDomain.exists?(antenna_id: antenna_id, name: name, exclude: exclude)
end 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 end

View file

@ -14,4 +14,17 @@
class AntennaTag < ApplicationRecord class AntennaTag < ApplicationRecord
belongs_to :antenna belongs_to :antenna
belongs_to :tag 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 end

View file

@ -1028,6 +1028,12 @@ en:
domain: Domains domain: Domains
keyword: Keywords keyword: Keywords
tag: Tags tag: Tags
errors:
limit:
accounts: 登録できるアカウント数の上限に達しています
domains: 登録できるドメイン数の上限に達しています
keywords: 登録できるキーワード数の上限に達しています
tags: 登録できるタグ数の上限に達しています
edit: edit:
accounts_hint: \@askyq or @askyq@example.com accounts_hint: \@askyq or @askyq@example.com
accounts_raw: Account list accounts_raw: Account list

View file

@ -1027,6 +1027,11 @@ ja:
duplicate_keyword: すでに同じキーワードが登録されています duplicate_keyword: すでに同じキーワードが登録されています
empty_contexts: 絞り込み条件が1つも指定されていないため無効です除外条件はカウントされません empty_contexts: 絞り込み条件が1つも指定されていないため無効です除外条件はカウントされません
invalid_list_owner: これはあなたのリストではありません invalid_list_owner: これはあなたのリストではありません
limit:
accounts: 登録できるアカウント数の上限に達しています
domains: 登録できるドメイン数の上限に達しています
keywords: 登録できるキーワード数の上限に達しています
tags: 登録できるタグ数の上限に達しています
over_limit: 所持できるアンテナ数 %{limit}を超えています over_limit: 所持できるアンテナ数 %{limit}を超えています
over_stl_limit: 所持できるSTLモード付きアンテナ数 (ホーム/リストそれぞれにつき%{limit}) を超えています over_stl_limit: 所持できるSTLモード付きアンテナ数 (ホーム/リストそれぞれにつき%{limit}) を超えています
remove_list_with_antenna: アンテナが関連付けられているリストは削除できません remove_list_with_antenna: アンテナが関連付けられているリストは削除できません