From 3a5dcbcd3b7de508d7b53412285b1cc9bf6102b5 Mon Sep 17 00:00:00 2001 From: pixeldesu Date: Wed, 15 Jul 2015 01:44:35 +0200 Subject: [PATCH] Move account deletion to Sidekiq worker, fixes #11 --- app/controllers/user/registrations_controller.rb | 10 ++++++++++ app/workers/deletion_worker.rb | 14 ++++++++++++++ config/routes.rb | 2 +- config/sidekiq.yml | 3 ++- 4 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 app/controllers/user/registrations_controller.rb create mode 100644 app/workers/deletion_worker.rb diff --git a/app/controllers/user/registrations_controller.rb b/app/controllers/user/registrations_controller.rb new file mode 100644 index 00000000..1e01a393 --- /dev/null +++ b/app/controllers/user/registrations_controller.rb @@ -0,0 +1,10 @@ +class User::RegistrationsController < Devise::RegistrationsController + + def destroy + DeletionWorker.perform_async(resource.id) + Devise.sign_out_all_scopes ? sign_out : sign_out(resource_name) + set_flash_message :notice, :destroyed if is_flashing_format? + yield resource if block_given? + respond_with_navigational(resource){ redirect_to after_sign_out_path_for(resource_name) } + end +end diff --git a/app/workers/deletion_worker.rb b/app/workers/deletion_worker.rb new file mode 100644 index 00000000..5ddaf186 --- /dev/null +++ b/app/workers/deletion_worker.rb @@ -0,0 +1,14 @@ +class DeletionWorker + include Sidekiq::Worker + + sidekiq_options queue: :deletion + + # @param resource_id [Integer] user id passed from Devise + def perform(resource_id) + begin + User.find(resource_id).destroy! + rescue => e + Rails.logger.error "failed to delete user: #{e.message}" + end + end +end diff --git a/config/routes.rb b/config/routes.rb index af4b4d6b..21d6ea56 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -46,7 +46,7 @@ Rails.application.routes.draw do get '/settings/account' => 'devise/registrations#edit', as: :edit_user_registration patch '/settings/account' => 'devise/registrations#update', as: :update_user_registration put '/settings/account' => 'devise/registrations#update' - delete '/settings/account' => 'devise/registrations#destroy' + delete '/settings/account' => 'user/registrations#destroy' end match '/settings/profile', to: 'user#edit', via: 'get', as: :edit_user_profile diff --git a/config/sidekiq.yml b/config/sidekiq.yml index 2d7c66ec..87312f72 100644 --- a/config/sidekiq.yml +++ b/config/sidekiq.yml @@ -8,4 +8,5 @@ production: :queues: - share - paperclip - - mailer \ No newline at end of file + - mailer + - deletion