2021-08-19 17:50:24 +02:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2022-07-23 15:33:35 +02:00
|
|
|
require "use_case/base"
|
2021-08-19 17:50:24 +02:00
|
|
|
|
|
|
|
module UseCase
|
|
|
|
module User
|
|
|
|
class Ban < UseCase::Base
|
2022-07-23 15:33:35 +02:00
|
|
|
REASON_SPAM = "Spam"
|
|
|
|
REASON_HARASSMENT = "Harassment"
|
|
|
|
REASON_BAN_EVASION = "Ban evasion"
|
2021-08-19 17:50:24 +02:00
|
|
|
|
|
|
|
option :target_user_id, type: Types::Coercible::Integer
|
|
|
|
option :expiry, types: Types::Nominal::DateTime.optional
|
|
|
|
option :source_user_id, type: Types::Coercible::Integer.optional
|
|
|
|
option :reason, type: Types::Coercible::String.optional
|
|
|
|
|
|
|
|
def call
|
2022-06-26 11:00:09 +02:00
|
|
|
ban = target_user.ban(expiry, reason, source_user)
|
2021-08-19 17:50:24 +02:00
|
|
|
|
|
|
|
if reason == REASON_SPAM
|
|
|
|
target_user.update!(
|
2021-12-30 00:20:09 +01:00
|
|
|
profile_picture: nil,
|
2022-07-23 15:33:35 +02:00
|
|
|
profile_header: nil
|
2021-12-30 00:20:09 +01:00
|
|
|
)
|
|
|
|
target_user.profile.update!(
|
2021-08-19 17:50:24 +02:00
|
|
|
display_name: nil,
|
2022-07-23 15:33:35 +02:00
|
|
|
description: "",
|
|
|
|
location: "",
|
|
|
|
website: ""
|
2021-08-19 17:50:24 +02:00
|
|
|
)
|
|
|
|
end
|
|
|
|
|
|
|
|
{
|
2022-07-23 15:33:35 +02:00
|
|
|
status: 201,
|
|
|
|
resource: ban,
|
|
|
|
extra: {
|
|
|
|
target_user:
|
|
|
|
}
|
2021-08-19 17:50:24 +02:00
|
|
|
}
|
|
|
|
end
|
|
|
|
|
|
|
|
def target_user
|
|
|
|
@target_user ||= ::User.find(target_user_id)
|
|
|
|
end
|
|
|
|
|
|
|
|
def source_user
|
2022-07-23 15:33:35 +02:00
|
|
|
@source_user ||= ::User.find(source_user_id) if source_user_id
|
2021-08-19 17:50:24 +02:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|