Files
Dalan/app/services/kyc_service.rb
2026-08-13 19:56:46 +03:30

66 lines
2.3 KiB
Ruby

# frozen_string_literal: true
class KycService
# passport front + selfie OR driver license front and back + selfie IR id card front and back + selfie
REQUIRED_DOC_AMOUNT = { 'Passport': 2, 'Driver license': 3, 'Identity card': 3 }.freeze
class << self
def profile_step(profile)
user = profile.user
profile_label = user.labels.find_by(key: :profile)
if profile_label.nil? # first profile everw
user.labels.create(key: :profile, value: profile.state, scope: :private)
else
profile_label.update(value: profile.state) # re-submitted profile
end
return unless profile.state == 'verified'
# verify treasury after profile verified
KYC.const_get(Barong::App.config.kyc_provider.capitalize, false)::TreasuryWorker.perform_async(profile.id)
end
def document_step(document)
user = document.user
user_document_label = user.labels.find_by(key: document.doc_type.downcase)
if user_document_label.nil? # first document ever
user.labels.create(key: document.doc_type.downcase, value: document.state, scope: :private)
else
return if user_document_label.value == 'verified'
user_document_label.update(value: document.state) # re-submitted document
end
end
def kycaid_callback(params)
422
end
def treasury_label_update(treasury)
user = treasury&.user
return unless user.present?
treasury_label = user.labels.find_by(key: treasury.kind)
if treasury_label.nil? # first profile ever
user.labels.create(key: treasury.kind, value: treasury.state, scope: :private)
else
treasury.ownership! if treasury.state == 'processing' && treasury.result.present?
# user must have just one kind of treasury and new treasury like card, must not change before verified card
treasury_label.update(value: treasury.reload.state) unless treasury_label.value == 'verified'
end
end
def phone_label_update(phone)
user = phone&.user
return unless user.present?
phone_label = user.labels.find_by(key: phone.step)
if phone_label.nil?
user.labels.create(key: phone.step, value: phone.state, scope: :private)
else
phone_label.update(value: phone.state)
end
end
end
end