using System.Collections.Generic; using System.Net.Http; using System.Threading; using System.Threading.Tasks; using BTCPayServer.Client.Models; namespace BTCPayServer.Client; public partial class BTCPayServerClient { public virtual async Task GetStoreRateConfiguration(string storeId, bool? fallback = null, CancellationToken token = default) { var path = GetRateConfigPath(storeId, fallback); return await SendHttpRequest(path, null, HttpMethod.Get, token); } private string GetRateConfigPath(string storeId, bool? fallback) => fallback switch { null => $"api/v1/stores/{storeId}/rates/configuration", true => $"api/v1/stores/{storeId}/rates/configuration/fallback", false => $"api/v1/stores/{storeId}/rates/configuration/primary", }; public virtual async Task> GetRateSources(CancellationToken token = default) { return await SendHttpRequest>("misc/rate-sources", null, HttpMethod.Get, token); } public virtual async Task UpdateStoreRateConfiguration(string storeId, StoreRateConfiguration request, bool? fallback = null, CancellationToken token = default) { var path = GetRateConfigPath(storeId, fallback); return await SendHttpRequest(path, request, HttpMethod.Put, token); } public virtual async Task> PreviewUpdateStoreRateConfiguration(string storeId, StoreRateConfiguration request, string[] currencyPair = null, CancellationToken token = default) { var queryPayload = currencyPair == null ? null : new Dictionary { { "currencyPair", currencyPair } }; return await SendHttpRequest>($"api/v1/stores/{storeId}/rates/configuration/preview", queryPayload, request, HttpMethod.Post, token); } public virtual async Task> GetStoreRates(string storeId, string[] currencyPair = null, CancellationToken token = default) { var queryPayload = currencyPair == null ? null : new Dictionary { { "currencyPair", currencyPair } }; return await SendHttpRequest>($"api/v1/stores/{storeId}/rates", queryPayload, HttpMethod.Get, token); } }