# 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