Initial commit
This commit is contained in:
78
app/api/v2/resource/documents.rb
Normal file
78
app/api/v2/resource/documents.rb
Normal 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
|
||||
Reference in New Issue
Block a user