< Summary

Information
Class: OzonRepositories.Migrations.AddOrderTriggers
Assembly: OzonRepositories
File(s): /home/runner/work/Studio2Prod/Studio2Prod/OzonRepositories/Migrations/20260908110500_AddOrderTriggers.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 460
Coverable lines: 460
Total lines: 506
Line coverage: 0%
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
Up(...)100%210%
Down(...)100%210%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/OzonRepositories/Migrations/20260908110500_AddOrderTriggers.cs

#LineLine coverage
 1using Microsoft.EntityFrameworkCore.Infrastructure;
 2using Microsoft.EntityFrameworkCore.Migrations;
 3
 4#nullable disable
 5
 6namespace OzonRepositories.Migrations
 7{
 8    /// <summary>
 9    /// Триггеры боевой БД. EF их не описывает, поэтому раньше они существовали только
 10    /// на проде: часть заводилась вручную, часть — скриптом Scripts/Sql/order_search_schema.sql
 11    /// из шага деплоя. На чистой базе их не было вовсе, то есть локальная копия молча
 12    /// теряла и заполнение Orders.UpdatedAt для синхронизации с Elasticsearch,
 13    /// и весь аудит изменений заказа в orders_history.
 14    ///
 15    /// Определения сняты с прода; DEFINER убран — иначе триггер нельзя создать
 16    /// на машине, где нет пользователя studio.
 17    ///
 18    /// DROP TRIGGER IF EXISTS перед каждым CREATE делает миграцию повторяемой.
 19    /// Тела триггеров многооператорные, поэтому миграции применяются через приложение
 20    /// (--migrate-database), а не заливкой SQL-скрипта клиентом mariadb: клиент разбил бы
 21    /// тело по внутренним «;». См. docs/database-migrations.md.
 22    /// </summary>
 23    [DbContext(typeof(Context.ApplicationDbContext))]
 24    [Migration("20260908110500_AddOrderTriggers")]
 25    public partial class AddOrderTriggers : Migration
 26    {
 27        /// <inheritdoc />
 28        protected override void Up(MigrationBuilder migrationBuilder)
 29        {
 30            // Orders.Status — легаси-колонка: в EF-модели её нет, код к ней не обращается,
 31            // но аудит-триггер trg_orders_after_update пишет её изменения в orders_history.
 32            // Без неё триггер не создать, поэтому заводим здесь, рядом с единственным
 33            // потребителем. На проде колонка давно есть.
 034            migrationBuilder.Sql("ALTER TABLE `Orders` ADD COLUMN IF NOT EXISTS `Status` varchar(200) CHARACTER SET utf8
 35
 036            migrationBuilder.Sql("DROP TRIGGER IF EXISTS `trg_orders_before_insert_updatedat`;");
 037            migrationBuilder.Sql(@"CREATE TRIGGER trg_orders_before_insert_updatedat
 038    BEFORE INSERT ON Orders
 039    FOR EACH ROW
 040BEGIN
 041    SET NEW.UpdatedAt = NOW(6);
 042END");
 43
 044            migrationBuilder.Sql("DROP TRIGGER IF EXISTS `trg_orders_before_update_updatedat`;");
 045            migrationBuilder.Sql(@"CREATE TRIGGER trg_orders_before_update_updatedat
 046    BEFORE UPDATE ON Orders
 047    FOR EACH ROW
 048BEGIN
 049    SET NEW.UpdatedAt = NOW(6);
 050END");
 51
 052            migrationBuilder.Sql("DROP TRIGGER IF EXISTS `trg_orders_after_insert`;");
 053            migrationBuilder.Sql(@"CREATE TRIGGER `trg_orders_after_insert` AFTER INSERT ON `Orders` FOR EACH ROW BEGIN
 054    DECLARE changed_by_user VARCHAR(255);
 055
 056    SET changed_by_user = COALESCE(NEW.UpdatedBy, 'system');
 057
 058
 059    INSERT INTO orders_history (OrderId, ColumnName, ColumnDisplayName, OldValue, NewValue, ChangedBy)
 060    VALUES (NEW.Id, 'RecordCreated', 'Создание записи', NULL, 'Новая запись создана', changed_by_user);
 061
 062END");
 63
 064            migrationBuilder.Sql("DROP TRIGGER IF EXISTS `trg_orders_after_update`;");
 065            migrationBuilder.Sql(@"CREATE TRIGGER `trg_orders_after_update` AFTER UPDATE ON `Orders` FOR EACH ROW BEGIN
 066    DECLARE changed_by_user VARCHAR(255);
 067    DECLARE old_name_value VARCHAR(255);
 068    DECLARE new_name_value VARCHAR(255);
 069    DECLARE old_value_str VARCHAR(255);
 070    DECLARE new_value_str VARCHAR(255);
 071
 072
 073    SET changed_by_user = COALESCE(NEW.UpdatedBy, 'system');
 074
 075
 076
 077    IF NOT (OLD.ShipmentNumber <=> NEW.ShipmentNumber) THEN
 078        INSERT INTO orders_history (OrderId, ColumnName, ColumnDisplayName, OldValue, NewValue, ChangedBy)
 079        VALUES (NEW.Id, 'ShipmentNumber', 'Номер отправления',
 080                COALESCE(OLD.ShipmentNumber, 'NULL'),
 081                COALESCE(NEW.ShipmentNumber, 'NULL'),
 082                changed_by_user);
 083    END IF;
 084
 085
 086    IF NOT (OLD.ProcessingDate <=> NEW.ProcessingDate) THEN
 087        INSERT INTO orders_history (OrderId, ColumnName, ColumnDisplayName, OldValue, NewValue, ChangedBy)
 088        VALUES (NEW.Id, 'ProcessingDate', 'Принят в обработку',
 089                COALESCE(CAST(OLD.ProcessingDate AS CHAR), 'NULL'),
 090                COALESCE(CAST(NEW.ProcessingDate AS CHAR), 'NULL'),
 091                changed_by_user);
 092    END IF;
 093
 094
 095    IF NOT (OLD.ShippingDate <=> NEW.ShippingDate) THEN
 096        INSERT INTO orders_history (OrderId, ColumnName, ColumnDisplayName, OldValue, NewValue, ChangedBy)
 097        VALUES (NEW.Id, 'ShippingDate', 'Дата отгрузки',
 098                COALESCE(CAST(OLD.ShippingDate AS CHAR), 'NULL'),
 099                COALESCE(CAST(NEW.ShippingDate AS CHAR), 'NULL'),
 0100                changed_by_user);
 0101    END IF;
 0102
 0103
 0104    IF NOT (OLD.Status <=> NEW.Status) THEN
 0105        INSERT INTO orders_history (OrderId, ColumnName, ColumnDisplayName, OldValue, NewValue, ChangedBy)
 0106        VALUES (NEW.Id, 'Status', 'Статус Ozon',
 0107                COALESCE(OLD.Status, 'NULL'),
 0108                COALESCE(NEW.Status, 'NULL'),
 0109                changed_by_user);
 0110    END IF;
 0111
 0112
 0113    IF NOT (OLD.AppStatusId <=> NEW.AppStatusId) THEN
 0114        SET old_name_value = NULL;
 0115        SET new_name_value = NULL;
 0116
 0117        IF OLD.AppStatusId IS NOT NULL THEN
 0118            SELECT Name INTO old_name_value FROM AppStatuses WHERE Id = OLD.AppStatusId;
 0119        END IF;
 0120
 0121        IF NEW.AppStatusId IS NOT NULL THEN
 0122            SELECT Name INTO new_name_value FROM AppStatuses WHERE Id = NEW.AppStatusId;
 0123        END IF;
 0124
 0125        INSERT INTO orders_history (OrderId, ColumnName, ColumnDisplayName, OldValue, NewValue, ChangedBy)
 0126        VALUES (NEW.Id, 'AppStatusId', 'Статус в отчете',
 0127                COALESCE(old_name_value, 'NULL'),
 0128                COALESCE(new_name_value, 'NULL'),
 0129                changed_by_user);
 0130    END IF;
 0131
 0132
 0133    IF NOT (OLD.ShipmentAmount <=> NEW.ShipmentAmount) THEN
 0134        INSERT INTO orders_history (OrderId, ColumnName, ColumnDisplayName, OldValue, NewValue, ChangedBy)
 0135        VALUES (NEW.Id, 'ShipmentAmount', 'Сумма отправления',
 0136                COALESCE(CAST(OLD.ShipmentAmount AS CHAR), 'NULL'),
 0137                COALESCE(CAST(NEW.ShipmentAmount AS CHAR), 'NULL'),
 0138                changed_by_user);
 0139    END IF;
 0140
 0141
 0142    IF NOT (OLD.ProductName <=> NEW.ProductName) THEN
 0143        INSERT INTO orders_history (OrderId, ColumnName, ColumnDisplayName, OldValue, NewValue, ChangedBy)
 0144        VALUES (NEW.Id, 'ProductName', 'Наименование',
 0145                COALESCE(OLD.ProductName, 'NULL'),
 0146                COALESCE(NEW.ProductName, 'NULL'),
 0147                changed_by_user);
 0148    END IF;
 0149
 0150
 0151    IF NOT (OLD.ProductKey <=> NEW.ProductKey) THEN
 0152        INSERT INTO orders_history (OrderId, ColumnName, ColumnDisplayName, OldValue, NewValue, ChangedBy)
 0153        VALUES (NEW.Id, 'ProductKey', 'Ключ товара',
 0154                COALESCE(OLD.ProductKey, 'NULL'),
 0155                COALESCE(NEW.ProductKey, 'NULL'),
 0156                changed_by_user);
 0157    END IF;
 0158
 0159
 0160    IF NOT (OLD.Article <=> NEW.Article) THEN
 0161        INSERT INTO orders_history (OrderId, ColumnName, ColumnDisplayName, OldValue, NewValue, ChangedBy)
 0162        VALUES (NEW.Id, 'Article', 'Артикул',
 0163                COALESCE(OLD.Article, 'NULL'),
 0164                COALESCE(NEW.Article, 'NULL'),
 0165                changed_by_user);
 0166    END IF;
 0167
 0168
 0169    IF NOT (OLD.ManufacturerId <=> NEW.ManufacturerId) THEN
 0170        SET old_name_value = NULL;
 0171        SET new_name_value = NULL;
 0172
 0173        IF OLD.ManufacturerId IS NOT NULL THEN
 0174            SELECT Name INTO old_name_value FROM Manufacturers WHERE Id = OLD.ManufacturerId;
 0175        END IF;
 0176
 0177        IF NEW.ManufacturerId IS NOT NULL THEN
 0178            SELECT Name INTO new_name_value FROM Manufacturers WHERE Id = NEW.ManufacturerId;
 0179        END IF;
 0180
 0181        INSERT INTO orders_history (OrderId, ColumnName, ColumnDisplayName, OldValue, NewValue, ChangedBy)
 0182        VALUES (NEW.Id, 'ManufacturerId', 'Производитель',
 0183                COALESCE(old_name_value, 'NULL'),
 0184                COALESCE(new_name_value, 'NULL'),
 0185                changed_by_user);
 0186    END IF;
 0187
 0188
 0189    IF NOT (OLD.Price <=> NEW.Price) THEN
 0190        INSERT INTO orders_history (OrderId, ColumnName, ColumnDisplayName, OldValue, NewValue, ChangedBy)
 0191        VALUES (NEW.Id, 'Price', 'Цена',
 0192                COALESCE(CAST(OLD.Price AS CHAR), 'NULL'),
 0193                COALESCE(CAST(NEW.Price AS CHAR), 'NULL'),
 0194                changed_by_user);
 0195    END IF;
 0196
 0197
 0198    IF NOT (OLD.Quantity <=> NEW.Quantity) THEN
 0199        INSERT INTO orders_history (OrderId, ColumnName, ColumnDisplayName, OldValue, NewValue, ChangedBy)
 0200        VALUES (NEW.Id, 'Quantity', 'Количество',
 0201                COALESCE(CAST(OLD.Quantity AS CHAR), 'NULL'),
 0202                COALESCE(CAST(NEW.Quantity AS CHAR), 'NULL'),
 0203                changed_by_user);
 0204    END IF;
 0205
 0206
 0207    IF NOT (OLD.ShipmentWarehouseId <=> NEW.ShipmentWarehouseId) THEN
 0208        SET old_name_value = NULL;
 0209        SET new_name_value = NULL;
 0210
 0211        IF OLD.ShipmentWarehouseId IS NOT NULL THEN
 0212            SELECT Name INTO old_name_value FROM Warehouses WHERE Id = OLD.ShipmentWarehouseId;
 0213        END IF;
 0214
 0215        IF NEW.ShipmentWarehouseId IS NOT NULL THEN
 0216            SELECT Name INTO new_name_value FROM Warehouses WHERE Id = NEW.ShipmentWarehouseId;
 0217        END IF;
 0218
 0219        INSERT INTO orders_history (OrderId, ColumnName, ColumnDisplayName, OldValue, NewValue, ChangedBy)
 0220        VALUES (NEW.Id, 'ShipmentWarehouseId', 'Склад отгрузки',
 0221                COALESCE(old_name_value, 'NULL'),
 0222                COALESCE(new_name_value, 'NULL'),
 0223                changed_by_user);
 0224    END IF;
 0225
 0226
 0227    IF NOT (OLD.SupplierId <=> NEW.SupplierId) THEN
 0228        SET old_name_value = NULL;
 0229        SET new_name_value = NULL;
 0230
 0231        IF OLD.SupplierId IS NOT NULL THEN
 0232            SELECT Name INTO old_name_value FROM Suppliers WHERE Id = OLD.SupplierId;
 0233        END IF;
 0234
 0235        IF NEW.SupplierId IS NOT NULL THEN
 0236            SELECT Name INTO new_name_value FROM Suppliers WHERE Id = NEW.SupplierId;
 0237        END IF;
 0238
 0239        INSERT INTO orders_history (OrderId, ColumnName, ColumnDisplayName, OldValue, NewValue, ChangedBy)
 0240        VALUES (NEW.Id, 'SupplierId', 'Поставщик',
 0241                COALESCE(old_name_value, 'NULL'),
 0242                COALESCE(new_name_value, 'NULL'),
 0243                changed_by_user);
 0244    END IF;
 0245
 0246
 0247    IF NOT (OLD.OrderNumberToSupplier <=> NEW.OrderNumberToSupplier) THEN
 0248        INSERT INTO orders_history (OrderId, ColumnName, ColumnDisplayName, OldValue, NewValue, ChangedBy)
 0249        VALUES (NEW.Id, 'OrderNumberToSupplier', 'Номер заказа',
 0250                COALESCE(OLD.OrderNumberToSupplier, 'NULL'),
 0251                COALESCE(NEW.OrderNumberToSupplier, 'NULL'),
 0252                changed_by_user);
 0253    END IF;
 0254
 0255
 0256    IF NOT (OLD.PurchasePrice <=> NEW.PurchasePrice) THEN
 0257        INSERT INTO orders_history (OrderId, ColumnName, ColumnDisplayName, OldValue, NewValue, ChangedBy)
 0258        VALUES (NEW.Id, 'PurchasePrice', 'Цена закупки',
 0259                COALESCE(CAST(OLD.PurchasePrice AS CHAR), 'NULL'),
 0260                COALESCE(CAST(NEW.PurchasePrice AS CHAR), 'NULL'),
 0261                changed_by_user);
 0262    END IF;
 0263
 0264
 0265    IF NOT (OLD.OriginalPurchasePrice <=> NEW.OriginalPurchasePrice) THEN
 0266        INSERT INTO orders_history (OrderId, ColumnName, ColumnDisplayName, OldValue, NewValue, ChangedBy)
 0267        VALUES (NEW.Id, 'OriginalPurchasePrice', 'Цена закупки до перевода',
 0268                COALESCE(CAST(OLD.OriginalPurchasePrice AS CHAR), 'NULL'),
 0269                COALESCE(CAST(NEW.OriginalPurchasePrice AS CHAR), 'NULL'),
 0270                changed_by_user);
 0271    END IF;
 0272
 0273
 0274    IF NOT (OLD.MinOzonCommission <=> NEW.MinOzonCommission) THEN
 0275        INSERT INTO orders_history (OrderId, ColumnName, ColumnDisplayName, OldValue, NewValue, ChangedBy)
 0276        VALUES (NEW.Id, 'MinOzonCommission', 'Минимальная комиссия ОЗОН',
 0277                COALESCE(CAST(OLD.MinOzonCommission AS CHAR), 'NULL'),
 0278                COALESCE(CAST(NEW.MinOzonCommission AS CHAR), 'NULL'),
 0279                changed_by_user);
 0280    END IF;
 0281
 0282
 0283    IF NOT (OLD.MaxOzonCommission <=> NEW.MaxOzonCommission) THEN
 0284        INSERT INTO orders_history (OrderId, ColumnName, ColumnDisplayName, OldValue, NewValue, ChangedBy)
 0285        VALUES (NEW.Id, 'MaxOzonCommission', 'Максимальная комиссия ОЗОН',
 0286                COALESCE(CAST(OLD.MaxOzonCommission AS CHAR), 'NULL'),
 0287                COALESCE(CAST(NEW.MaxOzonCommission AS CHAR), 'NULL'),
 0288                changed_by_user);
 0289    END IF;
 0290
 0291
 0292    IF NOT (OLD.MinProfit <=> NEW.MinProfit) THEN
 0293        INSERT INTO orders_history (OrderId, ColumnName, ColumnDisplayName, OldValue, NewValue, ChangedBy)
 0294        VALUES (NEW.Id, 'MinProfit', 'Минимальная прибыль',
 0295                COALESCE(CAST(OLD.MinProfit AS CHAR), 'NULL'),
 0296                COALESCE(CAST(NEW.MinProfit AS CHAR), 'NULL'),
 0297                changed_by_user);
 0298    END IF;
 0299
 0300
 0301    IF NOT (OLD.MaxProfit <=> NEW.MaxProfit) THEN
 0302        INSERT INTO orders_history (OrderId, ColumnName, ColumnDisplayName, OldValue, NewValue, ChangedBy)
 0303        VALUES (NEW.Id, 'MaxProfit', 'Максимальная прибыль',
 0304                COALESCE(CAST(OLD.MaxProfit AS CHAR), 'NULL'),
 0305                COALESCE(CAST(NEW.MaxProfit AS CHAR), 'NULL'),
 0306                changed_by_user);
 0307    END IF;
 0308
 0309
 0310    IF NOT (OLD.MinDiscount <=> NEW.MinDiscount) THEN
 0311        INSERT INTO orders_history (OrderId, ColumnName, ColumnDisplayName, OldValue, NewValue, ChangedBy)
 0312        VALUES (NEW.Id, 'MinDiscount', 'Минимальная скидка, %',
 0313                COALESCE(CAST(OLD.MinDiscount AS CHAR), 'NULL'),
 0314                COALESCE(CAST(NEW.MinDiscount AS CHAR), 'NULL'),
 0315                changed_by_user);
 0316    END IF;
 0317
 0318
 0319    IF NOT (OLD.MaxDiscount <=> NEW.MaxDiscount) THEN
 0320        INSERT INTO orders_history (OrderId, ColumnName, ColumnDisplayName, OldValue, NewValue, ChangedBy)
 0321        VALUES (NEW.Id, 'MaxDiscount', 'Максимальная скидка, %',
 0322                COALESCE(CAST(OLD.MaxDiscount AS CHAR), 'NULL'),
 0323                COALESCE(CAST(NEW.MaxDiscount AS CHAR), 'NULL'),
 0324                changed_by_user);
 0325    END IF;
 0326
 0327
 0328    IF NOT (OLD.CostPrice <=> NEW.CostPrice) THEN
 0329        INSERT INTO orders_history (OrderId, ColumnName, ColumnDisplayName, OldValue, NewValue, ChangedBy)
 0330        VALUES (NEW.Id, 'CostPrice', 'Себестоимость',
 0331                COALESCE(CAST(OLD.CostPrice AS CHAR), 'NULL'),
 0332                COALESCE(CAST(NEW.CostPrice AS CHAR), 'NULL'),
 0333                changed_by_user);
 0334    END IF;
 0335
 0336
 0337    IF NOT (OLD.DeliveryCity <=> NEW.DeliveryCity) THEN
 0338        INSERT INTO orders_history (OrderId, ColumnName, ColumnDisplayName, OldValue, NewValue, ChangedBy)
 0339        VALUES (NEW.Id, 'DeliveryCity', 'Город доставки',
 0340                COALESCE(OLD.DeliveryCity, 'NULL'),
 0341                COALESCE(NEW.DeliveryCity, 'NULL'),
 0342                changed_by_user);
 0343    END IF;
 0344
 0345
 0346    IF OLD.IsVerified <> NEW.IsVerified THEN
 0347        INSERT INTO orders_history (OrderId, ColumnName, ColumnDisplayName, OldValue, NewValue, ChangedBy)
 0348        VALUES (NEW.Id, 'IsVerified', 'Статус обработки',
 0349                CAST(OLD.IsVerified AS CHAR),
 0350                CAST(NEW.IsVerified AS CHAR),
 0351                changed_by_user);
 0352    END IF;
 0353
 0354
 0355    IF OLD.IsAccepted <> NEW.IsAccepted THEN
 0356        INSERT INTO orders_history (OrderId, ColumnName, ColumnDisplayName, OldValue, NewValue, ChangedBy)
 0357        VALUES (NEW.Id, 'IsAccepted', 'Принят',
 0358                CAST(OLD.IsAccepted AS CHAR),
 0359                CAST(NEW.IsAccepted AS CHAR),
 0360                changed_by_user);
 0361    END IF;
 0362
 0363
 0364    IF NOT (OLD.OzonClientId <=> NEW.OzonClientId) THEN
 0365        SET old_name_value = NULL;
 0366        SET new_name_value = NULL;
 0367
 0368        IF OLD.OzonClientId IS NOT NULL THEN
 0369            SELECT Name INTO old_name_value FROM OzonClients WHERE Id = OLD.OzonClientId;
 0370        END IF;
 0371
 0372        IF NEW.OzonClientId IS NOT NULL THEN
 0373            SELECT Name INTO new_name_value FROM OzonClients WHERE Id = NEW.OzonClientId;
 0374        END IF;
 0375
 0376        INSERT INTO orders_history (OrderId, ColumnName, ColumnDisplayName, OldValue, NewValue, ChangedBy)
 0377        VALUES (NEW.Id, 'OzonClientId', 'Ozon клиент',
 0378                COALESCE(old_name_value, 'NULL'),
 0379                COALESCE(new_name_value, 'NULL'),
 0380                changed_by_user);
 0381    END IF;
 0382
 0383END");
 384
 0385            migrationBuilder.Sql("DROP TRIGGER IF EXISTS `trg_orderarchives_after_insert`;");
 0386            migrationBuilder.Sql(@"CREATE TRIGGER `trg_orderarchives_after_insert` AFTER INSERT ON `OrderArchives` FOR E
 0387    DECLARE action_user VARCHAR(255);
 0388
 0389
 0390    SET action_user = COALESCE(NEW.ArchivedBy, 'System');
 0391
 0392
 0393    INSERT INTO orders_history (
 0394        OrderId,
 0395        ColumnName,
 0396        ColumnDisplayName,
 0397        OldValue,
 0398        NewValue,
 0399        ChangedBy
 0400    )
 0401    VALUES (
 0402        NEW.OrderId,
 0403        'OrderArchived',
 0404        'Архивация заказа',
 0405        NULL,
 0406        CONCAT(
 0407            'Заказ архивирован. Причина: ', COALESCE(NEW.ArchiveReason, 'Не указана'),
 0408            '. Предыдущий статус: ', COALESCE(NEW.PreviousStatus, 'Не указан'),
 0409            '. Дата архивации: ', NEW.ArchivedAt
 0410        ),
 0411        action_user
 0412    );
 0413END");
 414
 0415            migrationBuilder.Sql("DROP TRIGGER IF EXISTS `trg_orderarchives_after_update`;");
 0416            migrationBuilder.Sql(@"CREATE TRIGGER `trg_orderarchives_after_update` AFTER UPDATE ON `OrderArchives` FOR E
 0417    DECLARE changes TEXT DEFAULT '';
 0418    DECLARE action_user VARCHAR(255);
 0419
 0420    SET action_user = COALESCE(NEW.ArchivedBy, 'System');
 0421
 0422
 0423    IF NOT (OLD.ArchiveReason <=> NEW.ArchiveReason) THEN
 0424        SET changes = CONCAT(
 0425            changes,
 0426            'Причина архивации изменена с ""', COALESCE(OLD.ArchiveReason, 'NULL'),
 0427            '"" на ""', COALESCE(NEW.ArchiveReason, 'NULL'), '"". '
 0428        );
 0429    END IF;
 0430
 0431    IF NOT (OLD.PreviousStatus <=> NEW.PreviousStatus) THEN
 0432        SET changes = CONCAT(
 0433            changes,
 0434            'Предыдущий статус изменен с ""', COALESCE(OLD.PreviousStatus, 'NULL'),
 0435            '"" на ""', COALESCE(NEW.PreviousStatus, 'NULL'), '"". '
 0436        );
 0437    END IF;
 0438
 0439    IF NOT (OLD.PreviousOzonClientId <=> NEW.PreviousOzonClientId) THEN
 0440        SET changes = CONCAT(
 0441            changes,
 0442            'Предыдущий Ozon клиент ID изменен с ',
 0443            COALESCE(CAST(OLD.PreviousOzonClientId AS CHAR), 'NULL'),
 0444            ' на ', COALESCE(CAST(NEW.PreviousOzonClientId AS CHAR), 'NULL'), '. '
 0445        );
 0446    END IF;
 0447
 0448
 0449    IF LENGTH(changes) > 0 THEN
 0450        INSERT INTO orders_history (
 0451            OrderId,
 0452            ColumnName,
 0453            ColumnDisplayName,
 0454            OldValue,
 0455            NewValue,
 0456            ChangedBy
 0457        )
 0458        VALUES (
 0459            NEW.OrderId,
 0460            'ArchiveRecordUpdated',
 0461            'Обновление записи архивации',
 0462            CONCAT('До обновления: Архивация от ', OLD.ArchivedAt),
 0463            CONCAT('После обновления: ', changes),
 0464            action_user
 0465        );
 0466    END IF;
 0467END");
 468
 0469            migrationBuilder.Sql("DROP TRIGGER IF EXISTS `trg_orderarchives_after_delete`;");
 0470            migrationBuilder.Sql(@"CREATE TRIGGER `trg_orderarchives_after_delete` AFTER DELETE ON `OrderArchives` FOR E
 0471
 0472    INSERT INTO orders_history (
 0473        OrderId,
 0474        ColumnName,
 0475        ColumnDisplayName,
 0476        OldValue,
 0477        NewValue,
 0478        ChangedBy
 0479    )
 0480    VALUES (
 0481        OLD.OrderId,
 0482        'OrderUnarchived',
 0483        'Разархивация заказа',
 0484        CONCAT(
 0485            'Был в архиве с ', OLD.ArchivedAt,
 0486            '. Причина архивации: ', COALESCE(OLD.ArchiveReason, 'Не указана')
 0487        ),
 0488        'Заказ восстановлен из архива',
 0489        COALESCE(@current_user, 'System')
 0490    );
 0491END");
 0492        }
 493
 494        /// <inheritdoc />
 495        protected override void Down(MigrationBuilder migrationBuilder)
 496        {
 0497            migrationBuilder.Sql("DROP TRIGGER IF EXISTS `trg_orderarchives_after_delete`;");
 0498            migrationBuilder.Sql("DROP TRIGGER IF EXISTS `trg_orderarchives_after_update`;");
 0499            migrationBuilder.Sql("DROP TRIGGER IF EXISTS `trg_orderarchives_after_insert`;");
 0500            migrationBuilder.Sql("DROP TRIGGER IF EXISTS `trg_orders_after_update`;");
 0501            migrationBuilder.Sql("DROP TRIGGER IF EXISTS `trg_orders_after_insert`;");
 0502            migrationBuilder.Sql("DROP TRIGGER IF EXISTS `trg_orders_before_update_updatedat`;");
 0503            migrationBuilder.Sql("DROP TRIGGER IF EXISTS `trg_orders_before_insert_updatedat`;");
 0504        }
 505    }
 506}