diff --git a/apps/admin/controllers/users/update.rb b/apps/admin/controllers/users/update.rb index 81251179..f61a43a9 100644 --- a/apps/admin/controllers/users/update.rb +++ b/apps/admin/controllers/users/update.rb @@ -15,24 +15,14 @@ class Update end def call(params) - # TODO: To operation - @user = repo.find(params[:id]) + result = Interactors::Users::Update.new(params.valid?, params).call + @user = result.user - if @user && params.valid? - user_params = params[:user] - user_params[:admin] = user_params[:admin] == '1' - - repo.update(@user.id, user_params) + if result.successful? redirect_to routes.user_path(user.id) else redirect_to routes.edit_user_path(user.id) end end - - private - - def repo - @repo ||= UserRepository.new - end end end diff --git a/lib/ossboard/interactors/users/update.rb b/lib/ossboard/interactors/users/update.rb new file mode 100644 index 00000000..0136efd0 --- /dev/null +++ b/lib/ossboard/interactors/users/update.rb @@ -0,0 +1,36 @@ +require 'hanami/interactor' + +module Interactors + module Users + class Update + include Hanami::Interactor + + expose :user + + def initialize(params_valid, params) + @params = params + @params_valid = params_valid + @user = repo.find(@params[:id]) + end + + def call + return error('No user found') unless @user + return error('Unprocessable entity') unless @params_valid + + prepare_user_params + repo.update(@user.id, @params[:user]) + end + + private + + def repo + UserRepository.new() + end + + def prepare_user_params + + @params[:user][:admin] = @params[:user][:admin] == '1' + end + end + end +end