docbrown/app/workers/users/delete_worker.rb
Anna Buianova 5430448305
Confirmations that users GDPR data was deleted (#11039)
* Display gdpr delete requests for deleted users in admin

* Added a test for destroy a gdpr request

* Reorganized gdpr requests menu

* Update schema version

* Added a link to the flash notice after user delete by admin

* Fix namespace for tests

* Aligh schema.rb with master

* Added a missing newline

* Removed unused partial

* Fix typo

Co-authored-by: Michael Kohl <me@citizen428.net>

* Replaced string with symbols for AR

Co-authored-by: Michael Kohl <me@citizen428.net>

* Added an AuditLog record on gdpr delete confirmation

* Make email and user_id required in Users::GdprDeleteRequest

* Checked out package.json from master

* Fix Gdpr => GDPR

* Added missing space

* Remove unneeded freeze

Co-authored-by: Michael Kohl <me@citizen428.net>
2020-12-14 12:49:45 +03:00

30 lines
1.1 KiB
Ruby

module Users
class DeleteWorker
include Sidekiq::Worker
sidekiq_options queue: :high_priority, retry: 10
def perform(user_id, admin_delete = false) # rubocop:disable Style/OptionalBooleanParameter
user = User.find_by(id: user_id)
return unless user
Users::Delete.call(user)
# notify admins internally that they need to delete gdpr data
Users::GdprDeleteRequest.create(user_id: user.id, email: user.email, username: user.username)
return if admin_delete || user.email.blank?
# at this point the user object is already destroyed on the DB,
# thus we pass the data we need to render to deliver the email, not the
# whole object
NotifyMailer.with(name: user.name, email: user.email).account_deleted_email.deliver_now
# notify admins about self-delete
Slack::Messengers::UserDeleted.call(name: user.name, user_url: URL.user(user))
rescue StandardError => e
DatadogStatsClient.count("users.delete", 1, tags: ["action:failed", "user_id:#{user.id}"])
Honeybadger.context({ user_id: user.id })
Honeybadger.notify(e)
end
end
end