2022-10-23 01:30:55 +09:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
class CreateFeaturedTagService < BaseService
|
|
|
|
include Payloadable
|
|
|
|
|
2022-10-23 06:14:58 +09:00
|
|
|
def call(account, name, force: true)
|
2022-10-23 01:30:55 +09:00
|
|
|
@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
|
2022-10-23 06:14:58 +09:00
|
|
|
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
|
2022-10-23 01:30:55 +09:00
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
def build_json(featured_tag)
|
|
|
|
Oj.dump(serialize_payload(featured_tag, ActivityPub::AddSerializer, signer: @account))
|
|
|
|
end
|
|
|
|
end
|