< Summary

Information
Class: Services.ApiServices.PartsnavigatorApi.PartsnavigatorAnalog
Assembly: Services
File(s): /home/runner/work/Studio2Prod/Studio2Prod/AppRepository/ApiServices/PartsnavigatorApi/PartsnavigatorModels.cs
Line coverage
100%
Covered lines: 10
Uncovered lines: 0
Coverable lines: 10
Total lines: 80
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_Brand()100%11100%
get_Number()100%11100%
get_Description()100%11100%
get_IsRequested()100%11100%
get_IsAnalog()100%11100%
get_Url()100%11100%
get_ImageUrl()100%11100%
get_Availability()100%11100%
get_Delivery()100%11100%
get_Price()100%11100%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/AppRepository/ApiServices/PartsnavigatorApi/PartsnavigatorModels.cs

#LineLine coverage
 1using System.Text.Json.Serialization;
 2
 3namespace Services.ApiServices.PartsnavigatorApi;
 4
 5/// <summary>Ответ <c>GET /partsnavigator/{brand}/{number}</c> (контракт — /openapi.json парсера).</summary>
 6public sealed class PartsnavigatorLookup
 7{
 8    [JsonPropertyName("query")] public string Query { get; set; } = string.Empty;
 9    [JsonPropertyName("exists")] public bool Exists { get; set; }
 10    [JsonPropertyName("requested")] public PartsnavigatorPart? Requested { get; set; }
 11    [JsonPropertyName("analogs")] public List<PartsnavigatorAnalog>? Analogs { get; set; }
 12    [JsonPropertyName("analogs_blocked")] public bool AnalogsBlocked { get; set; }
 13    [JsonPropertyName("warnings")] public List<string> Warnings { get; set; } = [];
 14}
 15
 16public sealed class PartsnavigatorPart
 17{
 18    [JsonPropertyName("brand")] public string Brand { get; set; } = string.Empty;
 19    [JsonPropertyName("number")] public string Number { get; set; } = string.Empty;
 20    [JsonPropertyName("url")] public string Url { get; set; } = string.Empty;
 21    [JsonPropertyName("name")] public string Name { get; set; } = string.Empty;
 22    [JsonPropertyName("images")] public List<string> Images { get; set; } = [];
 23    [JsonPropertyName("characteristics_source")] public string? CharacteristicsSource { get; set; }
 24    [JsonPropertyName("characteristics")] public Dictionary<string, string> Characteristics { get; set; } = [];
 25    [JsonPropertyName("rating")] public string? Rating { get; set; }
 26    [JsonPropertyName("brand_info")] public PartsnavigatorBrandInfo? BrandInfo { get; set; }
 27}
 28
 29public sealed class PartsnavigatorBrandInfo
 30{
 31    [JsonPropertyName("name")] public string Name { get; set; } = string.Empty;
 32    [JsonPropertyName("found")] public bool Found { get; set; }
 33    [JsonPropertyName("logo_url")] public string? LogoUrl { get; set; }
 34    [JsonPropertyName("description")] public string Description { get; set; } = string.Empty;
 35    [JsonPropertyName("website")] public string? Website { get; set; }
 36    [JsonPropertyName("country")] public string? Country { get; set; }
 37}
 38
 39public sealed class PartsnavigatorAnalog
 40{
 641    [JsonPropertyName("brand")] public string Brand { get; set; } = string.Empty;
 642    [JsonPropertyName("number")] public string Number { get; set; } = string.Empty;
 643    [JsonPropertyName("description")] public string Description { get; set; } = string.Empty;
 344    [JsonPropertyName("is_requested")] public bool IsRequested { get; set; }
 345    [JsonPropertyName("is_analog")] public bool IsAnalog { get; set; }
 646    [JsonPropertyName("url")] public string Url { get; set; } = string.Empty;
 447    [JsonPropertyName("image_url")] public string? ImageUrl { get; set; }
 348    [JsonPropertyName("availability")] public string? Availability { get; set; }
 349    [JsonPropertyName("delivery")] public string? Delivery { get; set; }
 450    [JsonPropertyName("price")] public string? Price { get; set; }
 51}
 52
 53/// <summary>Формат ошибки парсера: <c>{"status":"error","code":"…","message":"…","retry":true}</c>.</summary>
 54internal sealed class PartsnavigatorErrorBody
 55{
 56    [JsonPropertyName("code")] public string? Code { get; set; }
 57    [JsonPropertyName("message")] public string? Message { get; set; }
 58    [JsonPropertyName("retry")] public bool Retry { get; set; }
 59}
 60
 61public enum PartsnavigatorStatus
 62{
 63    Found,
 64    NotFound,
 65    Error
 66}
 67
 68/// <summary>Итог запроса к парсеру без исключений наружу: найдено, нет такого артикула или сбой (с признаком повтора).<
 69public sealed record PartsnavigatorResult(
 70    PartsnavigatorStatus Status,
 71    PartsnavigatorLookup? Lookup = null,
 72    string? ErrorCode = null,
 73    string? Message = null,
 74    bool Retry = false,
 75    string? MatchedBrand = null)
 76{
 77    public static PartsnavigatorResult Found(PartsnavigatorLookup lookup) => new(PartsnavigatorStatus.Found, lookup);
 78    public static PartsnavigatorResult NotFound(string? message = null) => new(PartsnavigatorStatus.NotFound, null, "NOT
 79    public static PartsnavigatorResult Failure(string code, string message, bool retry) => new(PartsnavigatorStatus.Erro
 80}