Почистить комментарии от упоминаний процесса
Удалены <remarks>, <summary> сжаты до короткой фразы, вырезаны ссылки на Task/Ruling/этап/python/прототип; //-комментарии со ссылками на процесс удалены; то же в .proto. Правила обновлены в docs/spec/Код-стайл-Дейл.md. Строк комментариев 27210 -> ~19100.
This commit is contained in:
@@ -6,25 +6,15 @@ using Microsoft.Extensions.Logging;
|
||||
namespace Deal.Infrastructure.Integrations.Services;
|
||||
|
||||
/// <summary>
|
||||
/// HTTP-источник курсов ЦБ РФ: GET daily_json.js (Ruling 6, Task 8; 1:1 rates.py L43–59).
|
||||
/// HTTP-источник курсов ЦБ РФ
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Запрос — GET <c>https://www.cbr-xml-daily.ru/daily_json.js</c> (JSON-зеркало ЦБ). SSRF-контур: URL —
|
||||
/// фиксированная константа (allowlist), тенант не управляет адресом источника (в отличие от baseUrl
|
||||
/// AI-провайдеров, Task 6). Таймаут клиента — 15 с (python: <c>httpx timeout=15</c>), задаётся
|
||||
/// DI-регистрацией AddHttpClient в Deal.Api. Парсинг: <c>Valute[code].Value / Nominal</c> (1 единица
|
||||
/// валюты в рублях; Nominal может быть > 1, напр. 100 KZT), к курсам добавляется <c>RUB:1</c>.
|
||||
/// Любой сбой (HTTP-код ≠ 2xx, нераспознанное тело/запись, сетевая ошибка) → null + warning — кэш
|
||||
/// RatesService при этом не трогает (Ruling 6). Отмена вызывающего пробрасывается (не «сбой»).
|
||||
/// </remarks>
|
||||
public sealed class CbrRateSource : IRatesSource
|
||||
{
|
||||
/// <summary>
|
||||
/// Таймаут HTTP-запроса в секундах (python rates.py L46: <c>timeout=15</c>).
|
||||
/// Таймаут HTTP-запроса в секундах.
|
||||
/// </summary>
|
||||
public const int RequestTimeoutSeconds = 15;
|
||||
|
||||
// URL JSON-зеркала курсов ЦБ (constants.py L52). Фиксированный — SSRF-allowlist.
|
||||
private const string CbrUrl = "https://www.cbr-xml-daily.ru/daily_json.js";
|
||||
|
||||
// Корневой объект ответа: валюта → {Value, Nominal, …}.
|
||||
@@ -39,7 +29,6 @@ public sealed class CbrRateSource : IRatesSource
|
||||
// Базовая валюта ответа: курсы даются к рублю.
|
||||
private const string BaseCurrency = "RUB";
|
||||
|
||||
// Курс рубля к рублю (всегда 1.0, rates.py L50).
|
||||
private const double RubToRubRate = 1.0;
|
||||
|
||||
private readonly HttpClient _httpClient;
|
||||
@@ -74,7 +63,6 @@ public sealed class CbrRateSource : IRatesSource
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
// Любой сбой HTTP/парсинга = неуспех источника (python ловит все исключения, rates.py L57–59).
|
||||
_logger.LogWarning("CBR fetch failed: {Reason}", exception.Message);
|
||||
return null;
|
||||
}
|
||||
@@ -103,7 +91,6 @@ public sealed class CbrRateSource : IRatesSource
|
||||
{
|
||||
if (!TryParseCurrency(currency, out double rate))
|
||||
{
|
||||
// Нераспознанная запись валюты: как и исключение python внутри цикла, роняет весь fetch.
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -113,7 +100,6 @@ public sealed class CbrRateSource : IRatesSource
|
||||
return rates;
|
||||
}
|
||||
|
||||
// Разбирает одну запись валюты: курс = Value / Nominal, округлён до 6 знаков (rates.py L51–55).
|
||||
// currency: Пара «код валюты → объект {Value, Nominal}».
|
||||
// rate: Курс единицы валюты к рублю (валиден при возврате true).
|
||||
// Возвращает: True — запись распознана; False — повреждённая запись (весь fetch — сбой).
|
||||
@@ -127,7 +113,6 @@ public sealed class CbrRateSource : IRatesSource
|
||||
|
||||
JsonElement item = currency.Value;
|
||||
|
||||
// Значение по умолчанию, как в python: отсутствующий Value → 0, Nominal → 1 (иначе — сбой).
|
||||
double value = 0;
|
||||
if (item.TryGetProperty(ValuePropertyName, out JsonElement valueElement))
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user