< Summary

Information
Class: Services.OzonWebhookServices.Models.OzonErrorResponse
Assembly: Services
File(s): /home/runner/work/Studio2Prod/Studio2Prod/AppRepository/OzonWebhookServices/Models/OzonWebhookResponses.cs
Line coverage
100%
Covered lines: 1
Uncovered lines: 0
Coverable lines: 1
Total lines: 129
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_Error()100%11100%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/AppRepository/OzonWebhookServices/Models/OzonWebhookResponses.cs

#LineLine coverage
 1using System;
 2using System.Text.Json.Serialization;
 3
 4namespace Services.OzonWebhookServices.Models
 5{
 6    // ─────────────────────────────────────────────────────────────────────────
 7    // Ответ на TYPE_PING
 8    // ─────────────────────────────────────────────────────────────────────────
 9
 10    /// <summary>
 11    /// Ответ сервиса на запрос TYPE_PING.
 12    /// HTTP 200, Content-Type: application/json.
 13    /// </summary>
 14    public sealed class OzonPingSuccessResponse
 15    {
 16        /// <summary>Версия приложения.</summary>
 17        [JsonPropertyName("version")]
 18        public string Version { get; init; } = "1.0";
 19
 20        /// <summary>Название приложения.</summary>
 21        [JsonPropertyName("name")]
 22        public string Name { get; init; } = "Studio2Prod";
 23
 24        /// <summary>Дата и время начала обработки уведомления (UTC).</summary>
 25        [JsonPropertyName("time")]
 26        public DateTime Time { get; init; } = DateTime.UtcNow;
 27    }
 28
 29    // ─────────────────────────────────────────────────────────────────────────
 30    // Успешный ответ на все остальные типы уведомлений
 31    // ─────────────────────────────────────────────────────────────────────────
 32
 33    /// <summary>
 34    /// Стандартный успешный ответ сервиса на уведомление Ozon (кроме TYPE_PING).
 35    /// HTTP 200, Content-Type: application/json.
 36    /// </summary>
 37    public sealed class OzonGeneralSuccessResponse
 38    {
 39        /// <summary>Признак успешного получения уведомления. Всегда true.</summary>
 40        [JsonPropertyName("result")]
 41        public bool Result { get; init; } = true;
 42    }
 43
 44    // ─────────────────────────────────────────────────────────────────────────
 45    // Ответ при ошибке
 46    // ─────────────────────────────────────────────────────────────────────────
 47
 48    /// <summary>
 49    /// Ответ сервиса при ошибке обработки уведомления.
 50    /// HTTP 4xx или 5xx, Content-Type: application/json.
 51    /// </summary>
 52    public sealed class OzonErrorResponse
 53    {
 54        /// <summary>Информация об ошибке.</summary>
 55        [JsonPropertyName("error")]
 3056        public OzonErrorDetail Error { get; init; } = new();
 57    }
 58
 59    /// <summary>
 60    /// Детали ошибки в ответе Ozon.
 61    /// </summary>
 62    public sealed class OzonErrorDetail
 63    {
 64        /// <summary>Код ошибки.</summary>
 65        [JsonPropertyName("code")]
 66        public string Code { get; init; } = OzonErrorCode.ERROR_UNKNOWN.ToString();
 67
 68        /// <summary>Детальное описание ошибки.</summary>
 69        [JsonPropertyName("message")]
 70        public string Message { get; init; } = string.Empty;
 71
 72        /// <summary>Дополнительная информация (может быть null).</summary>
 73        [JsonPropertyName("details")]
 74        public string? Details { get; init; }
 75    }
 76
 77    // ─────────────────────────────────────────────────────────────────────────
 78    // Коды ошибок
 79    // ─────────────────────────────────────────────────────────────────────────
 80
 81    /// <summary>
 82    /// Коды ошибок для ответа Ozon при сбое обработки уведомления.
 83    /// </summary>
 84    public enum OzonErrorCode
 85    {
 86        /// <summary>Неизвестная ошибка.</summary>
 87        ERROR_UNKNOWN,
 88
 89        /// <summary>Не указано значение одного или нескольких параметров.</summary>
 90        ERROR_PARAMETER_VALUE_MISSED,
 91
 92        /// <summary>Дублирующийся запрос.</summary>
 93        ERROR_REQUEST_DUPLICATED
 94    }
 95
 96    // ─────────────────────────────────────────────────────────────────────────
 97    // Вспомогательный фабричный метод для ошибок
 98    // ─────────────────────────────────────────────────────────────────────────
 99
 100    /// <summary>
 101    /// Фабрика для быстрого создания экземпляров ошибочных ответов.
 102    /// </summary>
 103    public static class OzonErrorResponseFactory
 104    {
 105        /// <summary>Создаёт ответ с кодом ERROR_UNKNOWN.</summary>
 106        public static OzonErrorResponse Unknown(string message, string? details = null) =>
 107            new()
 108            {
 109                Error = new OzonErrorDetail
 110                {
 111                    Code = OzonErrorCode.ERROR_UNKNOWN.ToString(),
 112                    Message = message,
 113                    Details = details
 114                }
 115            };
 116
 117        /// <summary>Создаёт ответ с кодом ERROR_PARAMETER_VALUE_MISSED.</summary>
 118        public static OzonErrorResponse ParameterMissed(string message, string? details = null) =>
 119            new()
 120            {
 121                Error = new OzonErrorDetail
 122                {
 123                    Code = OzonErrorCode.ERROR_PARAMETER_VALUE_MISSED.ToString(),
 124                    Message = message,
 125                    Details = details
 126                }
 127            };
 128    }
 129}

Methods/Properties

get_Error()