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