mirror of
https://github.com/we-promise/sure
synced 2026-04-25 17:15:07 +02:00
* feat: add Binance support (Items, Accounts, Importers, Processor, and Sync) * refactor: deduplicate 'stablecoins' constant and push stale_rate filter to SQL --------- Signed-off-by: Juan José Mata <juanjo.mata@gmail.com> Co-authored-by: Juan José Mata <juanjo.mata@gmail.com>
37 lines
1.1 KiB
Ruby
37 lines
1.1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
# Fetches Binance Margin account balances.
|
|
# Returns normalized asset list with source tag "margin".
|
|
class BinanceItem::MarginImporter
|
|
attr_reader :binance_item, :provider
|
|
|
|
def initialize(binance_item, provider:)
|
|
@binance_item = binance_item
|
|
@provider = provider
|
|
end
|
|
|
|
def import
|
|
raw = provider.get_margin_account
|
|
assets = parse_assets(raw["userAssets"] || [])
|
|
{ assets: assets, raw: raw, source: "margin" }
|
|
rescue => e
|
|
Rails.logger.error "BinanceItem::MarginImporter #{binance_item.id} - #{e.message}"
|
|
{ assets: [], raw: nil, source: "margin", error: e.message }
|
|
end
|
|
|
|
private
|
|
|
|
def parse_assets(user_assets)
|
|
user_assets.filter_map do |a|
|
|
# Use netAsset (assets minus borrowed) as the meaningful balance
|
|
net = a["netAsset"].to_d
|
|
free = a["free"].to_d
|
|
locked = a["locked"].to_d
|
|
total = net
|
|
next if total.zero?
|
|
|
|
{ symbol: a["asset"], free: free.to_s("F"), locked: locked.to_s("F"), total: total.to_s("F"), net: net.to_s("F") }
|
|
end
|
|
end
|
|
end
|