< Summary

Information
Class: Services.DataServices.OrderRollback.OrderRollbackFieldCatalog
Assembly: Services
File(s): /home/runner/work/Studio2Prod/Studio2Prod/AppRepository/DataServices/OrderRollback/OrderRollbackFieldCatalog.cs
Line coverage
100%
Covered lines: 33
Uncovered lines: 0
Coverable lines: 33
Total lines: 79
Line coverage: 100%
Branch coverage
50%
Covered branches: 1
Total branches: 2
Branch coverage: 50%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.cctor()100%11100%
Find(...)50%22100%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/AppRepository/DataServices/OrderRollback/OrderRollbackFieldCatalog.cs

#LineLine coverage
 1using OzonDomains.Models;
 2
 3namespace Services.DataServices.OrderRollback;
 4
 5/// <summary>Тип значения поля заказа для парсинга/применения при откате.</summary>
 6public enum RollbackFieldKind
 7{
 8    String,
 9    Int,
 10    Decimal,
 11    Bool,
 12    DateTime,
 13    ForeignKey
 14}
 15
 16/// <summary>Справочник, используемый FK-полем (имя в истории → Id в Orders).</summary>
 17public enum RollbackLookup
 18{
 19    None,
 20    AppStatus,
 21    Manufacturer,
 22    Warehouse,
 23    Supplier,
 24    OzonClient
 25}
 26
 27/// <summary>Описание одного отслеживаемого поля заказа.</summary>
 28public sealed record RollbackFieldDef(
 29    string Column,
 30    string Display,
 31    RollbackFieldKind Kind,
 32    RollbackLookup Lookup = RollbackLookup.None);
 33
 34/// <summary>
 35/// Каталог полей заказа, которые отслеживает MySQL-триггер <c>trg_orders_after_update</c>
 36/// и которые можно восстановить (откатить/накатить) из истории.
 37/// Список должен оставаться в синхроне с триггером. Поле <c>Status</c> намеренно исключено:
 38/// в EF-модели оно <c>[NotMapped]</c> и вычисляется из <see cref="Order.ClientStatus"/> — задать его напрямую нельзя.
 39/// </summary>
 40public static class OrderRollbackFieldCatalog
 41{
 142    public static readonly IReadOnlyList<RollbackFieldDef> Fields = new List<RollbackFieldDef>
 143    {
 144        new("ShipmentNumber",        "Номер отправления",            RollbackFieldKind.String),
 145        new("ProcessingDate",        "Принят в обработку",           RollbackFieldKind.DateTime),
 146        new("ShippingDate",          "Дата отгрузки",                RollbackFieldKind.DateTime),
 147        new("AppStatusId",           "Статус в отчете",              RollbackFieldKind.ForeignKey, RollbackLookup.AppSta
 148        new("ShipmentAmount",        "Сумма отправления",            RollbackFieldKind.Decimal),
 149        new("ProductName",           "Наименование",                 RollbackFieldKind.String),
 150        new("ProductKey",            "Ключ товара",                  RollbackFieldKind.String),
 151        new("Article",               "Артикул",                      RollbackFieldKind.String),
 152        new("ManufacturerId",        "Производитель",                RollbackFieldKind.ForeignKey, RollbackLookup.Manufa
 153        new("Price",                 "Цена",                         RollbackFieldKind.Decimal),
 154        new("Quantity",              "Количество",                   RollbackFieldKind.Int),
 155        new("ShipmentWarehouseId",   "Склад отгрузки",               RollbackFieldKind.ForeignKey, RollbackLookup.Wareho
 156        new("SupplierId",            "Поставщик",                    RollbackFieldKind.ForeignKey, RollbackLookup.Suppli
 157        new("OrderNumberToSupplier", "Номер заказа",                 RollbackFieldKind.String),
 158        new("PurchasePrice",         "Цена закупки",                 RollbackFieldKind.Decimal),
 159        new("OriginalPurchasePrice", "Цена закупки до перевода",     RollbackFieldKind.Decimal),
 160        new("MinOzonCommission",     "Минимальная комиссия ОЗОН",    RollbackFieldKind.Decimal),
 161        new("MaxOzonCommission",     "Максимальная комиссия ОЗОН",   RollbackFieldKind.Decimal),
 162        new("MinProfit",             "Минимальная прибыль",          RollbackFieldKind.Decimal),
 163        new("MaxProfit",             "Максимальная прибыль",         RollbackFieldKind.Decimal),
 164        new("MinDiscount",           "Минимальная скидка, %",        RollbackFieldKind.Decimal),
 165        new("MaxDiscount",           "Максимальная скидка, %",       RollbackFieldKind.Decimal),
 166        new("CostPrice",             "Себестоимость",                RollbackFieldKind.Decimal),
 167        new("DeliveryCity",          "Город доставки",               RollbackFieldKind.String),
 168        new("IsVerified",            "Статус обработки",             RollbackFieldKind.Bool),
 169        new("IsAccepted",            "Принят",                       RollbackFieldKind.Bool),
 170        new("OzonClientId",          "Ozon клиент",                  RollbackFieldKind.ForeignKey, RollbackLookup.OzonCl
 171    };
 72
 73    /// <summary>Множество отслеживаемых имён колонок (для реконструкции снимка).</summary>
 174    public static readonly IReadOnlySet<string> TrackedColumns =
 2875        Fields.Select(f => f.Column).ToHashSet(StringComparer.Ordinal);
 76
 77    public static RollbackFieldDef? Find(string? column)
 7678        => column is null ? null : Fields.FirstOrDefault(f => f.Column == column);
 79}

Methods/Properties

.cctor()
Find(System.String)