From 698befd7aa6784e6eb047a61bbfb0a60ea7c753b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Geonizeli?= Date: Sat, 18 Sep 2021 16:08:49 -0300 Subject: [PATCH] subtract debits from cake balance --- app/dashboards/fiat_balance_dashboard.rb | 2 +- app/models/application_record.rb | 2 ++ app/models/stake_order.rb | 3 +++ app/models/user.rb | 1 + app/services/bsc_client.rb | 6 +++--- app/value_objects/wallet.rb | 22 +++++++++++++++++----- 6 files changed, 27 insertions(+), 9 deletions(-) diff --git a/app/dashboards/fiat_balance_dashboard.rb b/app/dashboards/fiat_balance_dashboard.rb index bf4e29b..dc4e534 100644 --- a/app/dashboards/fiat_balance_dashboard.rb +++ b/app/dashboards/fiat_balance_dashboard.rb @@ -31,7 +31,7 @@ class FiatBalanceDashboard < Administrate::BaseDashboard # FORM_ATTRIBUTES # an array of attributes that will be displayed # on the model's form (`new` and `edit`) pages. - FORM_ATTRIBUTES = [:user, :amount_cents].freeze + FORM_ATTRIBUTES = [:amount_cents].freeze # COLLECTION_FILTERS # a hash that defines filters that can be used while searching via the search diff --git a/app/models/application_record.rb b/app/models/application_record.rb index 767a072..06ba156 100644 --- a/app/models/application_record.rb +++ b/app/models/application_record.rb @@ -1,4 +1,6 @@ # frozen_string_literal: true class ApplicationRecord < ActiveRecord::Base self.abstract_class = true + + default_scope { order(created_at: :desc) } end diff --git a/app/models/stake_order.rb b/app/models/stake_order.rb index b5f9561..bbc39fb 100644 --- a/app/models/stake_order.rb +++ b/app/models/stake_order.rb @@ -33,6 +33,9 @@ class StakeOrder < ApplicationRecord super & ["pool_name", "amount"] end + scope :add, -> { where("amount > 0") } + scope :remove, -> { where("amount < 0") } + private def notification_message diff --git a/app/models/user.rb b/app/models/user.rb index 3023f3c..fbbe797 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -29,6 +29,7 @@ class User < ApplicationRecord has_many :documents, class_name: "UserDocument", dependent: :destroy has_many :stake_orders, dependent: :restrict_with_error + has_many :sell_crypto_orders, dependent: :restrict_with_error has_one :fiat_balance, dependent: :restrict_with_error validates :first_name, :last_name, :email, presence: true diff --git a/app/services/bsc_client.rb b/app/services/bsc_client.rb index 65689b4..ec3c061 100644 --- a/app/services/bsc_client.rb +++ b/app/services/bsc_client.rb @@ -10,12 +10,12 @@ class BscClient } end - def token_balance(token, token_decimals, wallet_address) + def token_balance(contract:, digits:, wallet_address:) result = self.class.get( - "https://api-eu1.tatum.io/v3/blockchain/token/balance/BSC/#{token}/#{wallet_address}", + "https://api-eu1.tatum.io/v3/blockchain/token/balance/BSC/#{contract}/#{wallet_address}", headers: @headers ).parsed_response["balance"] - result.to_f / (10**token_decimals) + (result.to_f / (10**digits)).round(5) end end diff --git a/app/value_objects/wallet.rb b/app/value_objects/wallet.rb index bae366f..ab1819c 100644 --- a/app/value_objects/wallet.rb +++ b/app/value_objects/wallet.rb @@ -11,12 +11,24 @@ class Wallet private def total_cake - return "0" if address.blank? + return 0 if address.blank? BscClient.new.token_balance( - "0x0e09fabb73bd3ade0a17ecc321fd13a19e81ce82", - 18, - address, - ) + contract: "0x0e09fabb73bd3ade0a17ecc321fd13a19e81ce82", + digits: 18, + wallet_address: address, + ) - total_cake_debit + end + + def total_cake_debit + total_cake_stake_debit + total_cake_sell_debit + end + + def total_cake_stake_debit + user.stake_orders.processing.add.sum(&:amount).to_f + end + + def total_cake_sell_debit + user.sell_crypto_orders.processing.sum(&:paid_amount).to_f end end