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