< Summary

Information
Class: Services.ApiServices.TelegramBotApi.TelegramRolloutStoreRow
Assembly: Services
File(s): /home/runner/work/Studio2Prod/Studio2Prod/AppRepository/ApiServices/TelegramBotApi/TelegramMessage.cs
Line coverage
100%
Covered lines: 1
Uncovered lines: 0
Coverable lines: 1
Total lines: 74
Line coverage: 100%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
get_Store()100%11100%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/AppRepository/ApiServices/TelegramBotApi/TelegramMessage.cs

#LineLine coverage
 1namespace Services.ApiServices.TelegramBotApi;
 2
 3public enum TelegramSeverity
 4{
 5    Info,
 6    Success,
 7    Warning,
 8    Error,
 9    Critical
 10}
 11
 12/// <summary>Готовое к отправке сообщение (HTML parse mode). Создаётся через <see cref="TelegramMessageFactory"/>.</summ
 13/// <param name="Html">Текст в HTML-разметке Telegram (не длиннее <see cref="TelegramMessageBuilder.MaxLength"/>).</para
 14/// <param name="ChatId">Чат; null — <see cref="TelegramBotConfig.DefaultChatId"/>.</param>
 15/// <param name="Channel">Категория: определяет чаты/темы по настройкам <see cref="TelegramBotConfig.Routes"/>.</param>
 16/// <param name="Critical">Критичное: дополнительно уходит в <see cref="TelegramBotConfig.CriticalRoutes"/> (личка админ
 17/// <param name="ImageUrl">Если задан, уходит фото с подписью (подпись Telegram ограничивает 1024 символами).</param>
 18public sealed record TelegramMessage(
 19    string Html,
 20    long? ChatId = null,
 21    bool Silent = false,
 22    string? ImageUrl = null,
 23    TelegramChannel Channel = TelegramChannel.Default,
 24    bool Critical = false);
 25
 26/// <summary>Один пункт сводки алертов.</summary>
 27/// <param name="Domain">Подпись раздела (Ozon, 1С, Hangfire…).</param>
 28/// <param name="Url">Относительная (/Studio2/…) или абсолютная ссылка; относительная требует <c>SiteBaseUrl</c>.</param
 29/// <param name="OrderCount">Сколько заказов затронуто; 0 — не показывать.</param>
 30public sealed record TelegramAlertItem(
 31    TelegramSeverity Severity,
 32    string Domain,
 33    string Title,
 34    IReadOnlyList<string> Lines,
 35    string? Url = null,
 36    int OrderCount = 0,
 37    bool Resolved = false);
 38
 39/// <summary>Новый заказ для сводки о поступлении.</summary>
 40/// <param name="Key">Ключ товара вида «артикул=код производителя» (2212018LUE=DEP).</param>
 41/// <param name="ImageUrl">Картинка товара из карточки; если задана, заказ уходит отдельным сообщением-фото.</param>
 42public sealed record TelegramNewOrderItem(string ShipmentNumber, string? Client, string? Warehouse, string? Key, string?
 43    string? ImageUrl = null);
 44
 45/// <summary>Результат наката остатков по складу 1С (только применённое в Ozon).</summary>
 12646public sealed record TelegramRolloutStoreRow(string Store, int Added, int Decreased, int Cleared, int Failed);
 47
 48/// <summary>Активные остатки склада 1С: позиций с остатком &gt; 0 и сумма штук.</summary>
 49public sealed record TelegramStoreStockRow(string Store, int Positions, decimal Units);
 50
 51/// <summary>Остатки на складе Ozon: позиций с остатком &gt; 0 и сумма штук (по данным отчёта наката, т.е. из Ozon API).
 52public sealed record TelegramOzonStockRow(string Warehouse, int Positions, decimal Units, string? Client = null);
 53
 54/// <summary>Сводка наката остатков Bitrix → Ozon для сообщения в Telegram.</summary>
 55public sealed record TelegramRolloutSummary(
 56    string ReportId,
 57    string Client,
 58    DateTime FinishedAtUtc,
 59    int ProductsInReport,
 60    IReadOnlyList<TelegramRolloutStoreRow> Stores,
 61    int CleanupSuccess,
 62    int CleanupFailed,
 63    int PricePushed,
 64    int PriceUnchanged,
 65    int PriceFailed,
 66    int OrphansFound,
 67    int OrphansZeroed,
 68    IReadOnlyList<TelegramStoreStockRow> Stock,
 69    DateTime? StockAsOfUtc,
 70    IReadOnlyList<TelegramOzonStockRow>? OzonStock = null)
 71{
 72    public int TotalFailed => Stores.Sum(x => x.Failed) + CleanupFailed + PriceFailed + Math.Max(0, OrphansFound - Orpha
 73    public bool HasErrors => TotalFailed > 0;
 74}

Methods/Properties

get_Store()