Files
sure/app/models/binance_item/margin_importer.rb
Louis 455c74dcfa Add Binance support, heavily inspired by the Coinbase one (#1317)
* 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>
2026-04-07 14:43:17 +02:00

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