This commit is contained in:
2026-08-12 07:06:01 +07:00
parent 1025658518
commit 9bc96dbc2d
39 changed files with 1682 additions and 658 deletions
+53
View File
@@ -0,0 +1,53 @@
import Foundation
/// Сводка по торговой паре из `GET /market/symbol-thumb`.
///
/// Нюанс нейминга: API Rapira меняет местами base и quote относительно
/// привычной терминологии для пары "BTC/USDT" `quoteCurrency == "BTC"`
/// (монета), а `baseCurrency == "USDT"` (валюта, в которой выражена цена).
struct SymbolThumb: Codable, Identifiable, Sendable {
var id: String { symbol }
let symbol: String
let open: Double
let high: Double
let low: Double
let close: Double
/// Относительное изменение за 24ч (0.0234 == +2.34%).
let chg: Double
/// Абсолютное изменение за 24ч в валюте цены.
let change: Double
let volume: Double
let turnover: Double
let quoteCurrencyName: String
let baseCurrency: String
let quoteCurrency: String
}
// MARK: - Представление
extension SymbolThumb {
var isPositive: Bool { chg >= 0 }
/// «70 324,00»
var priceFormatted: String { MarketFormatting.price(close) }
/// «+2.34%»
var changePercent: String { MarketFormatting.percent(chg, signed: true) }
/// «2.34%» без знака, когда знак уже несёт соседнее значение.
var changePercentPlain: String { MarketFormatting.percent(abs(chg), signed: false) }
/// «+1 676,00 USDT»
var changeFormatted: String { "\(MarketFormatting.signedAmount(change)) \(baseSymbol)" }
/// Символ валюты цены: вместо RUB и т.п.
var baseSymbol: String {
switch baseCurrency {
case "RUB": ""
case "USD": "$"
case "EUR": ""
default: baseCurrency
}
}
}