53 lines
1.7 KiB
Ruby
53 lines
1.7 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module API
|
|
module V2
|
|
module Admin
|
|
# Admin functionality over levels table
|
|
class Levels < Grape::API
|
|
resource :levels do
|
|
desc 'Returns array of permissions as paginated collection',
|
|
failure: [
|
|
{ code: 401, message: 'Invalid bearer token' }
|
|
],
|
|
success: API::V2::Entities::Level
|
|
get do
|
|
admin_authorize! :read, Level
|
|
|
|
present ::Level.all, with: API::V2::Entities::Level
|
|
end
|
|
|
|
desc 'Change vip level',
|
|
failure: [
|
|
{ code: 400, message: 'Required params are empty' },
|
|
{ code: 401, message: 'Invalid bearer token' },
|
|
{ code: 422, message: 'Validation errors' }
|
|
],
|
|
success: API::V2::Entities::User
|
|
params do
|
|
requires :uid, type: String
|
|
requires :level,
|
|
values: { value: -> (p){ %w[2 3].include?(p) }, message: 'user.level.invalid' },
|
|
default: '3',
|
|
desc: 'change level from vip'
|
|
end
|
|
put do
|
|
admin_authorize! :update, Profile
|
|
|
|
target_user = User.find_by(uid: params[:uid])
|
|
return error!({ errors: ['admin.users.doesnt_exist'] }, 404) if target_user.nil?
|
|
|
|
error!({ errors: ['admin.superadmin_change'] }, 422) if target_user.superadmin? && !current_user.superadmin?
|
|
|
|
unless target_user.update(declared(params.except(:uid), include_missing: false))
|
|
code_error!(target_user.errors.details, 422)
|
|
end
|
|
|
|
present user, with: API::V2::Entities::User
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|