Initial commit

This commit is contained in:
Yaser
2026-08-13 19:50:53 +03:30
commit 38084458fe
879 changed files with 95198 additions and 0 deletions

View File

@@ -0,0 +1,125 @@
# encoding: UTF-8
# frozen_string_literal: true
module API
module V2
module Management
module Helpers
def create_operation!(attrs)
account = ::Operations::Account.find_by(code: attrs.fetch(:code))
if account.scope.member?
create_member_operation!(attrs)
else
create_platform_operation!(attrs)
end
end
def set_ets_context!
Raven.tags_context(
peatio_version: Peatio::Application::VERSION
) if defined?(Raven)
end
private
def create_platform_operation!(attrs)
currency = Currency.find(attrs.fetch(:currency))
klass = ::Operations::Account
.find_by(code: attrs.fetch(:code))
.type
.yield_self { |type| "operations/#{type}" }
.camelize
.constantize
if klass == ::Operations::Revenue && attrs.dig(:uid)
member_id = Member.find_by!(uid: attrs.fetch(:uid)).id
else
member_id = nil
end
if attrs[:credit].present?
klass.credit!({
amount: attrs.fetch(:credit),
currency: currency,
code: attrs.fetch(:code),
member_id: member_id,
reference: attrs[:reference]
}.compact)
elsif attrs[:debit].present?
klass.debit!({
amount: attrs.fetch(:debit),
currency: currency,
code: attrs.fetch(:code),
member_id: member_id,
reference: attrs[:reference]
}.compact)
end
end
def create_member_operation!(attrs)
member = Member.find_by!(uid: attrs.fetch(:uid))
currency = Currency.find(attrs.fetch(:currency))
klass = ::Operations::Account
.find_by(code: attrs.fetch(:code))
.type
.yield_self { |type| "operations/#{type}" }
.camelize
.constantize
if attrs[:credit].present?
amount = attrs.fetch(:credit)
ActiveRecord::Base.transaction do
op = klass.credit!(amount: amount,
currency: currency,
code: attrs.fetch(:code),
member_id: member.id,
reference: attrs[:reference])
credit_legacy_balance!(amount: amount,
member: member,
currency: currency,
account: op.account)
op
end
elsif attrs[:debit].present?
amount = attrs.fetch(:debit)
ActiveRecord::Base.transaction do
op = klass.debit!(amount: amount,
currency: currency,
code: attrs.fetch(:code),
member_id: member.id,
reference: attrs[:reference])
debit_legacy_balance!(amount: amount,
member: member,
currency: currency,
account: op.account)
op
end
end
end
# @deprecated
def credit_legacy_balance!(amount:, member:, currency:, account:)
if account.kind.main?
member.get_account(currency).plus_funds(amount)
elsif account.kind.locked?
member.get_account(currency).plus_funds(amount)
member.get_account(currency).lock_funds(amount)
end
end
# @deprecated
def debit_legacy_balance!(amount:, member:, currency:, account:)
if account.kind.main?
member.get_account(currency).sub_funds(amount)
elsif account.kind.locked?
member.get_account(currency).unlock_and_sub_funds(amount)
end
end
end
end
end
end