Add keywords and domains editor

This commit is contained in:
KMY 2023-08-19 23:10:52 +09:00
parent bbfc5a0d88
commit c9a72a49e3
9 changed files with 514 additions and 4 deletions

View file

@ -0,0 +1,54 @@
# frozen_string_literal: true
class Api::V1::Antennas::DomainsController < Api::BaseController
before_action -> { doorkeeper_authorize! :read, :'read:lists' }, only: [:show]
before_action -> { doorkeeper_authorize! :write, :'write:lists' }, except: [:show]
before_action :require_user!
before_action :set_antenna
def show
@domains = load_domains
@exclude_domains = load_exclude_domains
render json: { domains: @domains, exclude_domains: @exclude_domains }
end
def create
ApplicationRecord.transaction do
domains.each do |domain|
@antenna.antenna_domains.create!(name: domain, exclude: false)
@antenna.update!(any_domains: false) if @antenna.any_domains
end
end
render_empty
end
def destroy
AntennaDomain.where(antenna: @antenna, name: domains).destroy_all
@antenna.update!(any_domains: true) unless @antenna.antenna_domains.where(exclude: false).any?
render_empty
end
private
def set_antenna
@antenna = Antenna.where(account: current_account).find(params[:antenna_id])
end
def load_domains
@antenna.antenna_domains.pluck(:name)
end
def load_exclude_domains
@antenna.exclude_domains || []
end
def domains
Array(resource_params[:domains])
end
def resource_params
params.permit(domains: [])
end
end

View file

@ -0,0 +1,59 @@
# frozen_string_literal: true
class Api::V1::Antennas::KeywordsController < Api::BaseController
before_action -> { doorkeeper_authorize! :read, :'read:lists' }, only: [:show]
before_action -> { doorkeeper_authorize! :write, :'write:lists' }, except: [:show]
before_action :require_user!
before_action :set_antenna
def show
@keywords = load_keywords
@exclude_keywords = load_exclude_keywords
render json: { keywords: @keywords, exclude_keywords: @exclude_keywords }
end
def create
new_keywords = @antenna.keywords || []
keywords.each do |keyword|
raise Mastodon::ValidationError, I18n.t('antennas.errors.same_keyword') if new_keywords.include?(keyword)
new_keywords << keyword
end
@antenna.update!(keywords: new_keywords, any_keywords: new_keywords.empty?)
render_empty
end
def destroy
new_keywords = @antenna.keywords || []
new_keywords -= keywords
@antenna.update!(keywords: new_keywords, any_keywords: new_keywords.empty?)
render_empty
end
private
def set_antenna
@antenna = Antenna.where(account: current_account).find(params[:antenna_id])
end
def load_keywords
@antenna.keywords || []
end
def load_exclude_keywords
@antenna.exclude_keywords || []
end
def keywords
Array(resource_params[:keywords])
end
def resource_params
params.permit(keywords: [])
end
end