1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- # frozen_string_literal: true
- class Api::V1::FiltersController < Api::BaseController
- before_action -> { doorkeeper_authorize! :read, :'read:filters' }, only: [:index, :show]
- before_action -> { doorkeeper_authorize! :write, :'write:filters' }, except: [:index, :show]
- before_action :require_user!
- before_action :set_filters, only: :index
- before_action :set_filter, only: [:show, :update, :destroy]
- def index
- render json: @filters, each_serializer: REST::V1::FilterSerializer
- end
- def create
- ApplicationRecord.transaction do
- filter_category = current_account.custom_filters.create!(resource_params)
- @filter = filter_category.keywords.create!(keyword_params)
- end
- render json: @filter, serializer: REST::V1::FilterSerializer
- end
- def show
- render json: @filter, serializer: REST::V1::FilterSerializer
- end
- def update
- ApplicationRecord.transaction do
- @filter.update!(keyword_params)
- @filter.custom_filter.assign_attributes(filter_params)
- raise Mastodon::ValidationError, I18n.t('filters.errors.deprecated_api_multiple_keywords') if @filter.custom_filter.changed? && @filter.custom_filter.keywords.count > 1
- @filter.custom_filter.save!
- end
- render json: @filter, serializer: REST::V1::FilterSerializer
- end
- def destroy
- @filter.destroy!
- render_empty
- end
- private
- def set_filters
- @filters = CustomFilterKeyword.includes(:custom_filter).where(custom_filter: { account: current_account })
- end
- def set_filter
- @filter = CustomFilterKeyword.includes(:custom_filter).where(custom_filter: { account: current_account }).find(params[:id])
- end
- def resource_params
- params.permit(:phrase, :expires_in, :irreversible, :whole_word, context: [])
- end
- def filter_params
- resource_params.slice(:expires_in, :irreversible, :context)
- end
- def keyword_params
- resource_params.slice(:phrase, :whole_word)
- end
- end
|