< Summary

Information
Class: Services.OzonWebhookServices.Handlers.WebhookHandlingResult
Assembly: Services
File(s): /home/runner/work/Studio2Prod/Studio2Prod/AppRepository/OzonWebhookServices/Handlers/IWebhookNotificationHandler.cs
Line coverage
66%
Covered lines: 2
Uncovered lines: 1
Coverable lines: 3
Total lines: 54
Line coverage: 66.6%
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_ActionDetails()100%11100%
get_ImageUrl()100%210%
op_Implicit(...)100%11100%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/AppRepository/OzonWebhookServices/Handlers/IWebhookNotificationHandler.cs

#LineLine coverage
 1using System.Threading;
 2using System.Threading.Tasks;
 3using OzonDomains.Models.OzonWebhook;
 4using Services.OzonWebhookServices.Models;
 5
 6namespace Services.OzonWebhookServices.Handlers
 7{
 8    /// <summary>
 9    /// Интерфейс обработчика конкретного типа push-уведомления Ozon.
 10    ///
 11    /// Паттерн: каждый новый тип уведомления (TYPE_POSTING_CANCELLED, TYPE_STOCKS_CHANGED и т.д.)
 12    /// реализуется в отдельном классе, без изменения <see cref="OzonWebhookService"/>.
 13    ///
 14    /// Регистрация в DI: все реализации добавляются как <c>IWebhookNotificationHandler</c>,
 15    /// и <see cref="OzonWebhookService"/> обходит их через <c>IEnumerable&lt;IWebhookNotificationHandler&gt;</c>.
 16    /// </summary>
 17    public interface IWebhookNotificationHandler
 18    {
 19        /// <summary>
 20        /// Возвращает <c>true</c>, если данный обработчик умеет обрабатывать указанный тип уведомления.
 21        /// </summary>
 22        bool CanHandle(OzonMessageType messageType);
 23
 24        /// <summary>
 25        /// Выполняет бизнес-логику обработки уведомления.
 26        /// </summary>
 27        /// <param name="notification">Типизированная модель уведомления.</param>
 28        /// <param name="ct">Токен отмены.</param>
 29        /// <returns>
 30        /// Описание выполненных действий (+ опционально картинка товара для Telegram-уведомления).
 31        /// Строковый литерал неявно приводится к <see cref="WebhookHandlingResult"/>, поэтому
 32        /// большинству обработчиков не нужно менять существующие <c>return msg;</c>.
 33        /// </returns>
 34        Task<WebhookHandlingResult> HandleAsync(IOzonWebhookMessage notification, CancellationToken ct);
 35    }
 36
 37    /// <summary>
 38    /// Результат обработки push-уведомления Ozon одним из <see cref="IWebhookNotificationHandler"/>.
 39    /// </summary>
 40    public sealed class WebhookHandlingResult
 41    {
 42        /// <summary>
 43        /// Описание выполненных действий. Сохраняется в поле <c>ActionDetails</c>
 44        /// записи <see cref="OzonDomains.Models.OzonPushNotification"/>.
 45        /// Пример: "Обновлено 2 заказа. Новый статус: 'Доставлено'".
 46        /// </summary>
 3547        public required string ActionDetails { get; init; }
 48
 49        /// <summary>Публичный URL картинки товара — прикладывается к уведомлению в Telegram, если задан.</summary>
 050        public string? ImageUrl { get; init; }
 51
 1852        public static implicit operator WebhookHandlingResult(string actionDetails) => new() { ActionDetails = actionDet
 53    }
 54}