docs
This commit is contained in:
@@ -15,7 +15,11 @@ pub struct BillingService {
|
||||
providers: HashMap<&'static str, Box<dyn PaymentProvider>>,
|
||||
}
|
||||
|
||||
// Добавляем Clone вручную, так как dyn Traits не поддерживают derive(Clone) легко
|
||||
// Добавляем Clone вручную, так как dyn Traits не поддерживают derive(Clone) легко.
|
||||
// TODO: axum клонирует ApiState (а значит и BillingService) на каждый запрос —
|
||||
// это означает повторное чтение env и пересборку HashMap<provider> на каждый HTTP-вызов,
|
||||
// не только при реальном клонировании сервиса. Стоит завернуть `providers` в Arc и строить
|
||||
// один раз в `new()`, чтобы `clone()` был дешёвым Arc::clone.
|
||||
impl Clone for BillingService {
|
||||
fn clone(&self) -> Self {
|
||||
// Снова читаем из env при клонировании
|
||||
@@ -79,6 +83,9 @@ impl BillingService {
|
||||
})?;
|
||||
|
||||
// --- ДИНАМИЧЕСКИЙ ЗАПРОС КУРСА TON ---
|
||||
// TODO: синхронный HTTP-запрос к TonAPI на каждый вызов initiate_payment
|
||||
// тормозит создание инвойса и делает эндпоинт зависимым от доступности
|
||||
// внешнего сервиса. Вынести в фоновый воркер с кешем в Redis (уже подключён).
|
||||
let client = reqwest::Client::new();
|
||||
let rate_res: serde_json::Value = client
|
||||
.get("https://tonapi.io/v2/rates?tokens=ton¤cies=usd,rub")
|
||||
|
||||
Reference in New Issue
Block a user