Created
December 1, 2015 21:05
-
-
Save hallgren/ee3fd8cc775782b7e4b1 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# yaks mapper | |
class UserMapper < Yaks::Mapper | |
link :self, '/api/admin/users/{user_guid}' | |
link :admin_users, '/api/admin/users' | |
link :toolbox_specific_accesses, '/api/admin/users/{user_guid}/toolbox_specific_accesses' | |
link :regions, '/api/admin/users/{user_guid}/region', if: ->{ object.regions } | |
link :plants, '/api/admin/users/{user_guid}/plant', if: ->{ object.plants } | |
has_many :regions, if: ->{ object.regions } | |
has_many :plants, if: ->{ object.plants } | |
attributes :user_guid, :full_name, :email | |
attribute :is_admin do | |
object.admin? | |
end | |
attribute :my_self do | |
object.my_self? | |
end | |
form :update_full_name do | |
action '/api/admin/users/{user_guid}' | |
method 'POST' | |
media_type 'application/json' | |
text :full_name, required: true | |
hidden :action, value: -> { 'update_full_name' } | |
end | |
form :update_email do | |
action '/api/admin/users/{user_guid}' | |
method 'POST' | |
media_type 'application/json' | |
email :email, required: true | |
hidden :action, value: -> { 'update_email' } | |
end | |
form :make_admin, if: -> { !object.admin? && !object.my_self? } do | |
action '/api/admin/users/{user_guid}' | |
method 'POST' | |
media_type 'application/json' | |
hidden :action, value: -> { 'make_admin' } | |
end | |
form :revoke_admin, if: -> { object.admin? && !object.my_self? } do | |
action '/api/admin/users/{user_guid}' | |
method 'POST' | |
media_type 'application/json' | |
hidden :action, value: -> { 'revoke_admin' } | |
end | |
form :add_company_access, if: -> { !object.company_access? && (!object.regions? && !object.plants?)} do | |
action '/api/admin/users/{user_guid}' | |
method 'POST' | |
media_type 'application/json' | |
hidden :action, value: -> { 'add_company_access' } | |
end | |
form :remove_company_access, if: -> { object.company_access? } do | |
action '/api/admin/users/{user_guid}' | |
method 'POST' | |
media_type 'application/json' | |
hidden :action, value: -> { 'remove_company_access' } | |
end | |
form :delete_user, if: -> { !object.my_self? } do | |
action '/api/admin/users/{user_guid}' | |
method 'POST' | |
media_type 'application/json' | |
hidden :action, value: -> { 'delete_user' } | |
end | |
end | |
#controller | |
post '/:user_guid' do | |
user_guid = params[:user_guid] | |
case params[:action] | |
when 'update_full_name' | |
IdentityAndAccessBc::ApplicationServices::UserService.update user_guid: user_guid, data: { full_name: params[:full_name]} | |
update_users_projection #Not nice | |
when 'update_email' | |
IdentityAndAccessBc::ApplicationServices::UserService.update user_guid: user_guid, data: { email: params[:email]} | |
update_users_projection #Not nice | |
when 'delete_user' | |
IdentityAndAccessBc::ApplicationServices::UserService.delete user_guid: user_guid | |
update_users_projection #Not nice | |
redirect "/api/admin/users/" | |
when 'make_admin' | |
ToolboxAdminBc::ApplicationServices::ToolboxUserSettingsService.make_admin user_guid: user_guid | |
when 'revoke_admin' | |
ToolboxAdminBc::ApplicationServices::ToolboxUserSettingsService.revoke_admin user_guid: user_guid | |
when 'add_company_access' | |
user_setting = ToolboxAdminBc::ApplicationServices::ToolboxUserSettingsService.get user_guid: user_guid | |
render_info 409, 'a region or plant was already added', user(user_guid), Mappers::UserMapper if user_setting.plant_guids.length > 0 || user_setting.region_guids.length > 0 | |
ToolboxAdminBc::ApplicationServices::ToolboxUserSettingsService.add_company_access user_guid: user_guid | |
when 'remove_company_access' | |
ToolboxAdminBc::ApplicationServices::ToolboxUserSettingsService.remove_company_access user_guid: user_guid | |
end | |
redirect "/api/admin/users/#{user_guid}" | |
end | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment