create_featured_tag_service.rb 762 B

12345678910111213141516171819202122232425
  1. # frozen_string_literal: true
  2. class CreateFeaturedTagService < BaseService
  3. include Payloadable
  4. def call(account, name, force: true)
  5. @account = account
  6. FeaturedTag.create!(account: account, name: name).tap do |featured_tag|
  7. ActivityPub::AccountRawDistributionWorker.perform_async(build_json(featured_tag), account.id) if @account.local?
  8. end
  9. rescue ActiveRecord::RecordNotUnique, ActiveRecord::RecordInvalid => e
  10. if force && e.is_a(ActiveRecord::RecordNotUnique)
  11. FeaturedTag.by_name(name).find_by!(account: account)
  12. else
  13. account.featured_tags.new(name: name)
  14. end
  15. end
  16. private
  17. def build_json(featured_tag)
  18. Oj.dump(serialize_payload(featured_tag, ActivityPub::AddSerializer, signer: @account))
  19. end
  20. end