Skip to content

Instantly share code, notes, and snippets.

@hallgren
Created December 1, 2015 21:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hallgren/ee3fd8cc775782b7e4b1 to your computer and use it in GitHub Desktop.
Save hallgren/ee3fd8cc775782b7e4b1 to your computer and use it in GitHub Desktop.
# 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