Initial commit
This commit is contained in:
90
app/api/v2/admin/members.rb
Normal file
90
app/api/v2/admin/members.rb
Normal file
@@ -0,0 +1,90 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user