Initial commit

This commit is contained in:
Yaser
2026-08-13 19:56:46 +03:30
commit de1d57a67b
474 changed files with 43185 additions and 0 deletions

View File

@@ -0,0 +1,78 @@
# frozen_string_literal: true
module API::V2
module Resource
# Dpcuments API
class Documents < Grape::API
desc 'Documents related routes'
resource :documents do
desc 'Return current user documents list',
failure: [
{ code: 401, message: 'Invalid bearer token' }
],
success: Entities::Document
get do
present current_user.documents, with: Entities::Document, only: %i[upload doc_type doc_number doc_expire]
end
desc 'Upload a new document for current user',
success: { code: 201, message: 'Document is uploaded' },
failure: [
{ code: 400, message: 'Required params are empty' },
{ code: 401, message: 'Invalid bearer token' },
{ code: 422, message: 'Validation errors' }
]
params do
requires :doc_type,
type: String,
allow_blank: false,
desc: 'Document type'
requires :doc_number,
type: String,
allow_blank: false,
desc: 'Document number'
requires :upload,
desc: 'Array of Rack::Multipart::UploadedFile'
optional :doc_expire,
type: { value: Date, message: "resource.documents.expire_not_a_date" },
allow_blank: true,
desc: 'Document expiration date'
optional :doc_category,
type: String,
values: { value: -> (p){ %w[front_side back_side selfie].include?(p) }, message: 'resource.documents.doc_category' },
desc: 'Category of the submitted document - front/back/selfie etc.'
optional :identificator, type: String, desc: 'Identificator for documents to be supplied together'
optional :metadata, type: String, desc: 'Any additional key: value pairs in json string format'
end
post do
if Barong::App.config.required_docs_expire
error!({ errors: ['resource.documents.invalid_format'] }, 422) unless /\A\d{4}\-\d{2}\-\d{2}\z/.match?(params[:doc_expire].to_s)
error!({ errors: ['resource.documents.already_expired'] }, 422) if params[:doc_expire] < DateTime.now.to_date
end
unless current_user.documents.count <= Barong::App.config.doc_num_limit
error!({ errors: ['resource.documents.limit_reached'] }, 400)
end
unless current_user.documents.count + params[:upload].length <= Barong::App.config.doc_num_limit
error!({ errors: ['resource.documents.limit_will_be_reached'] }, 400)
end
params[:identificator] = SecureRandom.hex(16) unless params[:identificator]
params[:upload].each do |file|
doc = current_user.documents.new(params.except(:upload).merge(upload: file))
code_error!(doc.errors.details, 422) unless doc.save
end
status 201
rescue Excon::Error => e
Rails.logger.error e
error!('Connection error', 422)
end
end
end
end
end