< Summary

Information
Class: Services.ApiServices.TelegramBotApi.TelegramRolloutSummary
Assembly: Services
File(s): /home/runner/work/Studio2Prod/Studio2Prod/AppRepository/ApiServices/TelegramBotApi/TelegramMessage.cs
Line coverage
100%
Covered lines: 18
Uncovered lines: 0
Coverable lines: 18
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
.ctor(...)100%11100%
get_ReportId()100%11100%
get_Client()100%11100%
get_FinishedAtUtc()100%11100%
get_ProductsInReport()100%11100%
get_Stores()100%11100%
get_CleanupSuccess()100%11100%
get_CleanupFailed()100%11100%
get_PricePushed()100%11100%
get_PriceUnchanged()100%11100%
get_PriceFailed()100%11100%
get_OrphansFound()100%11100%
get_OrphansZeroed()100%11100%
get_Stock()100%11100%
get_StockAsOfUtc()100%11100%
get_OzonStock()100%11100%
get_TotalFailed()100%11100%
get_HasErrors()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>
 46public 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>
 455public sealed record TelegramRolloutSummary(
 356    string ReportId,
 457    string Client,
 358    DateTime FinishedAtUtc,
 459    int ProductsInReport,
 2660    IReadOnlyList<TelegramRolloutStoreRow> Stores,
 661    int CleanupSuccess,
 962    int CleanupFailed,
 663    int PricePushed,
 664    int PriceUnchanged,
 965    int PriceFailed,
 1566    int OrphansFound,
 1267    int OrphansZeroed,
 668    IReadOnlyList<TelegramStoreStockRow> Stock,
 369    DateTime? StockAsOfUtc,
 970    IReadOnlyList<TelegramOzonStockRow>? OzonStock = null)
 71{
 2472    public int TotalFailed => Stores.Sum(x => x.Failed) + CleanupFailed + PriceFailed + Math.Max(0, OrphansFound - Orpha
 673    public bool HasErrors => TotalFailed > 0;
 74}