From 6d1aa013f928bfbce30896539c2eaa5d8e5e1b17 Mon Sep 17 00:00:00 2001 From: Andreas Nedbal Date: Sat, 8 Mar 2025 18:38:52 +0100 Subject: [PATCH] Clean up records of banned users * Inbox entries for their questions get removed * All reports related to them get resolved --- lib/use_case/user/ban.rb | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/lib/use_case/user/ban.rb b/lib/use_case/user/ban.rb index 63ef69cf..89e174d7 100644 --- a/lib/use_case/user/ban.rb +++ b/lib/use_case/user/ban.rb @@ -18,22 +18,27 @@ module UseCase if reason == REASON_SPAM target_user.update!( profile_picture: nil, - profile_header: nil + profile_header: nil, ) target_user.profile.update!( display_name: nil, description: "", location: "", - website: "" + website: "", ) end + if permanent_ban? + remove_inbox_entries + resolve_reports + end + { status: 201, resource: ban, extra: { - target_user: - } + target_user:, + }, } end @@ -44,6 +49,20 @@ module UseCase def source_user @source_user ||= ::User.find(source_user_id) if source_user_id end + + private + + def permanent_ban? + expiry.nil? + end + + def remove_inbox_entries + InboxEntry.joins(:question).where(questions: { user_id: target_user_id }).destroy_all + end + + def resolve_reports + Report.where(target_user_id: target_user_id).update_all(resolved: true) # rubocop:disable Rails/SkipsModelValidations + end end end end