filters_controller.rb 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. # frozen_string_literal: true
  2. class Api::V1::FiltersController < Api::BaseController
  3. before_action -> { doorkeeper_authorize! :read, :'read:filters' }, only: [:index, :show]
  4. before_action -> { doorkeeper_authorize! :write, :'write:filters' }, except: [:index, :show]
  5. before_action :require_user!
  6. before_action :set_filters, only: :index
  7. before_action :set_filter, only: [:show, :update, :destroy]
  8. def index
  9. render json: @filters, each_serializer: REST::V1::FilterSerializer
  10. end
  11. def create
  12. ApplicationRecord.transaction do
  13. filter_category = current_account.custom_filters.create!(resource_params)
  14. @filter = filter_category.keywords.create!(keyword_params)
  15. end
  16. render json: @filter, serializer: REST::V1::FilterSerializer
  17. end
  18. def show
  19. render json: @filter, serializer: REST::V1::FilterSerializer
  20. end
  21. def update
  22. ApplicationRecord.transaction do
  23. @filter.update!(keyword_params)
  24. @filter.custom_filter.assign_attributes(filter_params)
  25. raise Mastodon::ValidationError, I18n.t('filters.errors.deprecated_api_multiple_keywords') if @filter.custom_filter.changed? && @filter.custom_filter.keywords.count > 1
  26. @filter.custom_filter.save!
  27. end
  28. render json: @filter, serializer: REST::V1::FilterSerializer
  29. end
  30. def destroy
  31. @filter.destroy!
  32. render_empty
  33. end
  34. private
  35. def set_filters
  36. @filters = CustomFilterKeyword.includes(:custom_filter).where(custom_filter: { account: current_account })
  37. end
  38. def set_filter
  39. @filter = CustomFilterKeyword.includes(:custom_filter).where(custom_filter: { account: current_account }).find(params[:id])
  40. end
  41. def resource_params
  42. params.permit(:phrase, :expires_in, :irreversible, :whole_word, context: [])
  43. end
  44. def filter_params
  45. resource_params.slice(:expires_in, :irreversible, :context)
  46. end
  47. def keyword_params
  48. resource_params.slice(:phrase, :whole_word)
  49. end
  50. end