From c2e0f14a335c186586738f14b2aa4bfc9893f52c Mon Sep 17 00:00:00 2001 From: EA Date: Mon, 13 May 2024 14:35:25 +0600 Subject: [PATCH] Add required field for top coin market info endpoints --- Sources/MarketKit/Classes/Kit.swift | 5 +++++ Sources/MarketKit/Classes/Models/MarketInfo.swift | 1 + .../MarketKit/Classes/Models/MarketInfoRaw.swift | 3 +++ .../MarketKit/Classes/Providers/HsProvider.swift | 13 ++++++++++++- 4 files changed, 21 insertions(+), 1 deletion(-) diff --git a/Sources/MarketKit/Classes/Kit.swift b/Sources/MarketKit/Classes/Kit.swift index d720f67..7606a2c 100644 --- a/Sources/MarketKit/Classes/Kit.swift +++ b/Sources/MarketKit/Classes/Kit.swift @@ -109,6 +109,11 @@ public extension Kit { return coinManager.marketInfos(rawMarketInfos: rawMarketInfos) } + func topCoinsMarketInfos(top: Int, currencyCode: String) async throws -> [MarketInfo] { + let rawMarketInfos = try await hsProvider.topCoinsMarketInfos(top: top, currencyCode: currencyCode) + return coinManager.marketInfos(rawMarketInfos: rawMarketInfos) + } + func advancedMarketInfos(top: Int = 250, currencyCode: String) async throws -> [MarketInfo] { let rawMarketInfos = try await hsProvider.advancedMarketInfos(top: top, currencyCode: currencyCode) return coinManager.marketInfos(rawMarketInfos: rawMarketInfos) diff --git a/Sources/MarketKit/Classes/Models/MarketInfo.swift b/Sources/MarketKit/Classes/Models/MarketInfo.swift index c8ab533..c045e4a 100644 --- a/Sources/MarketKit/Classes/Models/MarketInfo.swift +++ b/Sources/MarketKit/Classes/Models/MarketInfo.swift @@ -7,6 +7,7 @@ public struct MarketInfo { public let priceChange7d: Decimal? public let priceChange14d: Decimal? public let priceChange30d: Decimal? + public let priceChange90d: Decimal? public let priceChange200d: Decimal? public let priceChange1y: Decimal? public let marketCap: Decimal? diff --git a/Sources/MarketKit/Classes/Models/MarketInfoRaw.swift b/Sources/MarketKit/Classes/Models/MarketInfoRaw.swift index b51ebb9..a505598 100644 --- a/Sources/MarketKit/Classes/Models/MarketInfoRaw.swift +++ b/Sources/MarketKit/Classes/Models/MarketInfoRaw.swift @@ -8,6 +8,7 @@ struct MarketInfoRaw: ImmutableMappable { let priceChange7d: Decimal? let priceChange14d: Decimal? let priceChange30d: Decimal? + let priceChange90d: Decimal? let priceChange200d: Decimal? let priceChange1y: Decimal? let marketCap: Decimal? @@ -28,6 +29,7 @@ struct MarketInfoRaw: ImmutableMappable { priceChange7d = try? map.value("price_change_7d", using: Transform.stringToDecimalTransform) priceChange14d = try? map.value("price_change_14d", using: Transform.stringToDecimalTransform) priceChange30d = try? map.value("price_change_30d", using: Transform.stringToDecimalTransform) + priceChange90d = try? map.value("price_change_90d", using: Transform.stringToDecimalTransform) priceChange200d = try? map.value("price_change_200d", using: Transform.stringToDecimalTransform) priceChange1y = try? map.value("price_change_1y", using: Transform.stringToDecimalTransform) marketCap = try? map.value("market_cap", using: Transform.stringToDecimalTransform) @@ -54,6 +56,7 @@ struct MarketInfoRaw: ImmutableMappable { priceChange7d: priceChange7d, priceChange14d: priceChange14d, priceChange30d: priceChange30d, + priceChange90d: priceChange90d, priceChange200d: priceChange200d, priceChange1y: priceChange1y, marketCap: marketCap, diff --git a/Sources/MarketKit/Classes/Providers/HsProvider.swift b/Sources/MarketKit/Classes/Providers/HsProvider.swift index 8d29491..e3b0daf 100644 --- a/Sources/MarketKit/Classes/Providers/HsProvider.swift +++ b/Sources/MarketKit/Classes/Providers/HsProvider.swift @@ -94,6 +94,17 @@ extension HsProvider { return try await networkManager.fetch(url: "\(baseUrl)/v1/coins", method: .get, parameters: parameters, headers: headers) } + func topCoinsMarketInfos(top: Int, currencyCode: String) async throws -> [MarketInfoRaw] { + let parameters: Parameters = [ + "limit": top, + "fields": "price,price_change_24h,price_change_7d,price_change_30d,price_change_90d,market_cap,market_cap_rank,total_volume", + "currency": currencyCode.lowercased(), + "order_by_rank": "true", + ] + + return try await networkManager.fetch(url: "\(baseUrl)/v1/coins", method: .get, parameters: parameters, headers: headers) + } + func advancedMarketInfos(top: Int, currencyCode: String) async throws -> [MarketInfoRaw] { let parameters: Parameters = [ "limit": top, @@ -107,7 +118,7 @@ extension HsProvider { func marketInfos(coinUids: [String], currencyCode: String) async throws -> [MarketInfoRaw] { let parameters: Parameters = [ "uids": coinUids.joined(separator: ","), - "fields": "price,price_change_24h,price_change_7d,price_change_30d,market_cap,market_cap_rank,total_volume", + "fields": "price,price_change_24h,price_change_7d,price_change_30d,price_change_90d,market_cap,market_cap_rank,total_volume", "currency": currencyCode.lowercased(), ]