about summary refs log tree commit diff
path: root/app/services/create_featured_tag_service.rb
blob: 3cc59156db41b16c647a6c0ee4c37039c861118e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# frozen_string_literal: true

class CreateFeaturedTagService < BaseService
  include Payloadable

  def call(account, name, force: true)
    @account = account

    FeaturedTag.create!(account: account, name: name).tap do |featured_tag|
      ActivityPub::AccountRawDistributionWorker.perform_async(build_json(featured_tag), account.id) if @account.local?
    end
  rescue ActiveRecord::RecordNotUnique, ActiveRecord::RecordInvalid => e
    if force && e.is_a(ActiveRecord::RecordNotUnique)
      FeaturedTag.by_name(name).find_by!(account: account)
    else
      account.featured_tags.new(name: name)
    end
  end

  private

  def build_json(featured_tag)
    Oj.dump(serialize_payload(featured_tag, ActivityPub::AddSerializer, signer: @account))
  end
end