# frozen_string_literal: true # # this file follow withdraw_limits.rb # module API module V2 module Admin class DepositLimits < Grape::API helpers ::API::V2::Admin::Helpers # list of deposit limits desc 'Returns deposit limits table as paginated collection', is_array: true, success: API::V2::Admin::Entities::DepositLimit params do optional :group, type: String, desc: -> { API::V2::Entities::DepositLimit.documentation[:group][:desc] }, coerce_with: ->(c) { c.strip.downcase } optional :kyc_level, type: String, desc: -> { API::V2::Entities::DepositLimit.documentation[:kyc_level][:desc] } optional :kind, values: { value: ->(v) { (Array.wrap(v) - DepositLimit.kind.values).blank? }, message: 'limit.kind.invalid' }, desc: -> { API::V2::Entities::DepositLimit.documentation[:kind][:desc] } use :pagination use :ordering end get '/deposit_limits' do admin_authorize! :read, DepositLimit ransack_params = Helpers::RansackBuilder.new(params) .eq(:group, :kyc_level, :kind) .build search = DepositLimit.ransack(ransack_params) search.sorts = "#{params[:order_by]} #{params[:ordering]}" present paginate(search.result), with: API::V2::Entities::DepositLimit end # create deposit limit desc 'It creates deposit limits record', success: API::V2::Entities::DepositLimit params do requires :limit_24_hour, type: { value: BigDecimal, message: 'admin.deposit_limit.non_decimal_limit_24_hour' }, values: { value: ->(p) { p && p >= 0 }, message: 'admin.deposit_limit.invalid_limit_24_hour' }, desc: -> { API::V2::Entities::DepositLimit.documentation[:limit_24_hour][:desc] } requires :limit_1_month, type: { value: BigDecimal, message: 'admin.deposit_limit.non_decimal_limit_1_month' }, values: { value: ->(p) { p && p >= 0 }, message: 'admin.deposit_limit.invalid_limit_1_month' }, desc: -> { API::V2::Entities::DepositLimit.documentation[:limit_1_month][:desc] } requires :kind, values: { value: ->(v) { (Array.wrap(v) - DepositLimit.kind.values).blank? }, message: 'limit.kind.invalid' }, desc: -> { API::V2::Entities::DepositLimit.documentation[:kind][:desc] } optional :group, type: String, default: ::DepositLimit::ANY, desc: -> { API::V2::Entities::DepositLimit.documentation[:group][:desc] } optional :kyc_level, type: String, default: ::DepositLimit::ANY, desc: -> { API::V2::Entities::DepositLimit.documentation[:kyc_level][:desc] } end post '/deposit_limits' do admin_authorize! :create, DepositLimit deposit_limit = ::DepositLimit.new(declared(params)) if deposit_limit.save present deposit_limit, with: API::V2::Entities::DepositLimit status 201 else body errors: deposit_limit.errors.full_messages status 422 end end # update deposit limit desc 'It updates deposit limits record', success: API::V2::Entities::DepositLimit params do requires :id, type: { value: Integer, message: 'admin.deposit_limit.non_integer_id' }, desc: -> { API::V2::Entities::DepositLimit.documentation[:id][:desc] } optional :limit_24_hour, type: { value: BigDecimal, message: 'admin.deposit_limit.non_decimal_limit_24_hour' }, values: { value: ->(p) { p && p >= 0 }, message: 'admin.deposit_limit.invalid_limit_24_hour' }, desc: -> { API::V2::Entities::DepositLimit.documentation[:limit_24_hour][:desc] } optional :limit_1_month, type: { value: BigDecimal, message: 'admin.deposit_limit.non_decimal_limit_1_month' }, values: { value: ->(p) { p && p >= 0 }, message: 'admin.deposit_limit.invalid_limit_1_month' }, desc: -> { API::V2::Entities::DepositLimit.documentation[:limit_1_month][:desc] } optional :kind, values: { value: ->(v) { (Array.wrap(v) - DepositLimit.kind.values).blank? }, message: 'limit.kind.invalid' }, desc: -> { API::V2::Entities::DepositLimit.documentation[:kind][:desc] } optional :kyc_level, type: String, desc: -> { API::V2::Entities::DepositLimit.documentation[:kyc_level][:desc] } optional :group, type: String, coerce_with: ->(c) { c.strip.downcase }, desc: -> { API::V2::Entities::DepositLimit.documentation[:group][:desc] } end put '/deposit_limits' do admin_authorize! :update, DepositLimit deposit_limit = ::DepositLimit.find(params[:id]) if deposit_limit.update(declared(params, include_missing: false)) present deposit_limit, with: API::V2::Entities::DepositLimit else body errors: deposit_limit.errors.full_messages status 422 end end # delete deposit limit desc 'It deletes deposit limits record', success: API::V2::Entities::DepositLimit params do requires :id, type: { value: Integer, message: 'admin.deposit_limit.non_integer_id' }, desc: -> { API::V2::Entities::DepositLimit.documentation[:id][:desc] } end delete '/deposit_limits/:id' do admin_authorize! :delete, DepositLimit present DepositLimit.destroy(params[:id]), with: API::V2::Entities::DepositLimit end end end end end