Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[CPDNPQ-2314] log what Users::MergeAndArchive is doing #2118

Merged
merged 1 commit into from
Jan 14, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 13 additions & 3 deletions app/services/users/merge_and_archive.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,19 +8,25 @@ class MergeAndArchive
attribute :user_to_merge
attribute :user_to_keep
attribute :set_uid, :boolean, default: false
attribute :logger, default: -> { Rails.logger }
private :user_to_merge, :user_to_keep, :set_uid

def call(dry_run: true)
logger.info "Dry Run" if dry_run

ApplicationRecord.transaction do
move_applications(from_user: user_to_merge, to_user: user_to_keep)
move_participant_id_changes(from_user: user_to_merge, to_user: user_to_keep)
user_to_keep.participant_id_changes.find_or_create_by!(from_participant_id: user_to_merge.ecf_id, to_participant_id: user_to_keep.ecf_id)
uid_to_keep = user_to_merge.uid if user_to_merge.uid.present? && user_to_keep.uid.blank?

Rails.logger.info("Archiving user ID=#{user_to_merge.id}")
logger.info("Archiving user ID=#{user_to_merge.id}")
Users::Archiver.new(user: user_to_merge.reload).archive!

user_to_keep.update!(uid: uid_to_keep) if uid_to_keep && set_uid
if uid_to_keep && set_uid
logger.info("Setting UID=#{uid_to_keep} on user ID=#{user_to_keep.id}")
user_to_keep.update!(uid: uid_to_keep)
end

raise ActiveRecord::Rollback if dry_run
end
Expand All @@ -30,12 +36,16 @@ def call(dry_run: true)

def move_applications(from_user:, to_user:)
from_user.applications.each do |application|
logger.info("Moving application ID=#{application.id} from user ID=#{from_user.id} to user ID=#{to_user.id}")
application.update!(user: to_user)
end
end

def move_participant_id_changes(from_user:, to_user:)
from_user.participant_id_changes.update!(user: to_user)
if from_user.participant_id_changes.any?
logger.info("Moving participant ID changes IDs=#{from_user.participant_id_changes.pluck(:id)} from user ID=#{from_user.id} to user ID=#{to_user.id}")
from_user.participant_id_changes.update!(user: to_user)
end
end
end
end
4 changes: 1 addition & 3 deletions lib/tasks/merge_user_into_another.rake
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,5 @@ task :merge_user_into_another, %i[user_ecf_id_to_merge user_ecf_id_to_keep dry_r
exit 1
end

logger.info "Dry Run" if dry_run

Users::MergeAndArchive.new(user_to_merge:, user_to_keep:, set_uid: true).call(dry_run:)
Users::MergeAndArchive.new(user_to_merge:, user_to_keep:, set_uid: true, logger:).call(dry_run:)
end
2 changes: 1 addition & 1 deletion spec/lib/tasks/merge_user_into_another_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
let(:user_to_keep) { create(:user) }
let(:service_double) { instance_double(Users::MergeAndArchive) }

before { allow(Users::MergeAndArchive).to receive(:new).with(user_to_merge:, user_to_keep:, set_uid: true) { merge_and_archive_service } }
before { allow(Users::MergeAndArchive).to receive(:new).with(user_to_merge:, user_to_keep:, set_uid: true, logger: an_instance_of(Logger)) { merge_and_archive_service } }
after { Rake::Task["merge_user_into_another"].reenable }

subject(:run_task) { Rake::Task["merge_user_into_another"].invoke(user_to_merge.ecf_id, user_to_keep.ecf_id, dry_run) }
Expand Down
Loading