Retrospring/lib/use_case/relationship/destroy.rb

48 lines
1.1 KiB
Ruby
Raw Normal View History

# frozen_string_literal: true
require "use_case/base"
require "errors"
module UseCase
module Relationship
class Destroy < UseCase::Base
option :source_user, type: Types.Instance(::User) | Types::Coercible::String
option :target_user, type: Types.Instance(::User) | Types::Coercible::String
option :type, type: Types::RelationshipTypes
def call
source_user = find_source_user
target_user = find_target_user
source_user.public_send("un#{type}", target_user)
{
2022-01-16 09:51:27 -08:00
status: 204,
resource: nil,
2022-01-16 09:51:27 -08:00
extra: {
target_user: target_user
}
}
end
private
def find_source_user
2022-01-22 13:48:55 -08:00
return source_user if source_user.is_a?(::User)
::User.find_by!(screen_name: source_user)
rescue ActiveRecord::RecordNotFound
raise Errors::UserNotFound
end
def find_target_user
2022-01-22 13:48:55 -08:00
return target_user if target_user.is_a?(::User)
::User.find_by!(screen_name: target_user)
rescue ActiveRecord::RecordNotFound
raise Errors::UserNotFound
end
end
end
end