91 lines
2.8 KiB
Ruby
91 lines
2.8 KiB
Ruby
# encoding: UTF-8
|
|
# frozen_string_literal: true
|
|
|
|
module API
|
|
module V2
|
|
module Admin
|
|
class Members < Grape::API
|
|
helpers ::API::V2::Admin::Helpers
|
|
|
|
desc 'Get all members, result is paginated.',
|
|
is_array: true,
|
|
success: API::V2::Admin::Entities::Member
|
|
params do
|
|
optional :state,
|
|
desc: 'Filter order by state.'
|
|
optional :role,
|
|
values: { value: -> { ::Ability.roles }, message: 'admin.member.invalid_role' }
|
|
optional :group,
|
|
values: { value: -> { ::Member.groups }, message: 'admin.member.invalid_group' }
|
|
optional :email,
|
|
desc: -> { API::V2::Entities::Member.documentation[:email][:desc] }
|
|
use :uid
|
|
use :date_picker
|
|
use :pagination
|
|
use :ordering
|
|
end
|
|
get '/members' do
|
|
admin_authorize! :read, Member
|
|
|
|
ransack_params = Helpers::RansackBuilder.new(params)
|
|
.eq(:uid, :email, :state, :role, :group)
|
|
.with_daterange
|
|
.build
|
|
|
|
search = Member.ransack(ransack_params)
|
|
search.sorts = "#{params[:order_by]} #{params[:ordering]}"
|
|
present paginate(search.result), with: API::V2::Admin::Entities::Member
|
|
end
|
|
|
|
desc 'Get available members groups.',
|
|
is_array: true
|
|
get '/members/groups' do
|
|
admin_authorize! :read, Member
|
|
|
|
Member.groups
|
|
end
|
|
|
|
desc 'Get a member.' do
|
|
success API::V2::Admin::Entities::Member
|
|
end
|
|
params do
|
|
requires :uid,
|
|
type: String,
|
|
desc: 'The shared user ID.'
|
|
end
|
|
get '/members/:uid' do
|
|
admin_authorize! :read, Member
|
|
|
|
present Member.find_by!(uid: params[:uid]), with: API::V2::Admin::Entities::Member
|
|
end
|
|
|
|
desc 'Set user group.' do
|
|
success API::V2::Admin::Entities::Member
|
|
end
|
|
params do
|
|
requires :uid,
|
|
type: String,
|
|
desc: 'The shared user ID.'
|
|
requires :group,
|
|
type: String,
|
|
coerce_with: ->(v) { v.strip.downcase },
|
|
desc: 'User gruop'
|
|
end
|
|
put '/members/:uid' do
|
|
admin_authorize! :update, Member
|
|
declared_params = declared(params)
|
|
|
|
member = Member.find_by!(uid: declared_params[:uid])
|
|
if member.update(group: declared_params[:group])
|
|
present member, with: API::V2::Admin::Entities::Member
|
|
status 201
|
|
else
|
|
body errors: member.errors.full_messages
|
|
status 422
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|