< Summary

Information
Class: Services.DataServices.OrderRollback.RollbackFieldDef
Assembly: Services
File(s): /home/runner/work/Studio2Prod/Studio2Prod/AppRepository/DataServices/OrderRollback/OrderRollbackFieldCatalog.cs
Line coverage
100%
Covered lines: 5
Uncovered lines: 0
Coverable lines: 5
Total lines: 79
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_Column()100%11100%
get_Display()100%11100%
get_Kind()100%11100%
get_Lookup()100%11100%

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>
 2728public sealed record RollbackFieldDef(
 54629    string Column,
 1030    string Display,
 39231    RollbackFieldKind Kind,
 4832    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{
 42    public static readonly IReadOnlyList<RollbackFieldDef> Fields = new List<RollbackFieldDef>
 43    {
 44        new("ShipmentNumber",        "Номер отправления",            RollbackFieldKind.String),
 45        new("ProcessingDate",        "Принят в обработку",           RollbackFieldKind.DateTime),
 46        new("ShippingDate",          "Дата отгрузки",                RollbackFieldKind.DateTime),
 47        new("AppStatusId",           "Статус в отчете",              RollbackFieldKind.ForeignKey, RollbackLookup.AppSta
 48        new("ShipmentAmount",        "Сумма отправления",            RollbackFieldKind.Decimal),
 49        new("ProductName",           "Наименование",                 RollbackFieldKind.String),
 50        new("ProductKey",            "Ключ товара",                  RollbackFieldKind.String),
 51        new("Article",               "Артикул",                      RollbackFieldKind.String),
 52        new("ManufacturerId",        "Производитель",                RollbackFieldKind.ForeignKey, RollbackLookup.Manufa
 53        new("Price",                 "Цена",                         RollbackFieldKind.Decimal),
 54        new("Quantity",              "Количество",                   RollbackFieldKind.Int),
 55        new("ShipmentWarehouseId",   "Склад отгрузки",               RollbackFieldKind.ForeignKey, RollbackLookup.Wareho
 56        new("SupplierId",            "Поставщик",                    RollbackFieldKind.ForeignKey, RollbackLookup.Suppli
 57        new("OrderNumberToSupplier", "Номер заказа",                 RollbackFieldKind.String),
 58        new("PurchasePrice",         "Цена закупки",                 RollbackFieldKind.Decimal),
 59        new("OriginalPurchasePrice", "Цена закупки до перевода",     RollbackFieldKind.Decimal),
 60        new("MinOzonCommission",     "Минимальная комиссия ОЗОН",    RollbackFieldKind.Decimal),
 61        new("MaxOzonCommission",     "Максимальная комиссия ОЗОН",   RollbackFieldKind.Decimal),
 62        new("MinProfit",             "Минимальная прибыль",          RollbackFieldKind.Decimal),
 63        new("MaxProfit",             "Максимальная прибыль",         RollbackFieldKind.Decimal),
 64        new("MinDiscount",           "Минимальная скидка, %",        RollbackFieldKind.Decimal),
 65        new("MaxDiscount",           "Максимальная скидка, %",       RollbackFieldKind.Decimal),
 66        new("CostPrice",             "Себестоимость",                RollbackFieldKind.Decimal),
 67        new("DeliveryCity",          "Город доставки",               RollbackFieldKind.String),
 68        new("IsVerified",            "Статус обработки",             RollbackFieldKind.Bool),
 69        new("IsAccepted",            "Принят",                       RollbackFieldKind.Bool),
 70        new("OzonClientId",          "Ozon клиент",                  RollbackFieldKind.ForeignKey, RollbackLookup.OzonCl
 71    };
 72
 73    /// <summary>Множество отслеживаемых имён колонок (для реконструкции снимка).</summary>
 74    public static readonly IReadOnlySet<string> TrackedColumns =
 75        Fields.Select(f => f.Column).ToHashSet(StringComparer.Ordinal);
 76
 77    public static RollbackFieldDef? Find(string? column)
 78        => column is null ? null : Fields.FirstOrDefault(f => f.Column == column);
 79}