From ee127b27851afd245e7e693d18106623dce3c6ac Mon Sep 17 00:00:00 2001 From: nns <278048682+nurdotnet@users.noreply.github.com> Date: Fri, 8 May 2026 01:29:51 +0500 Subject: [PATCH] =?UTF-8?q?fix(migrations):=20=D0=B4=D0=BE=D0=B1=D0=B0?= =?UTF-8?q?=D0=B2=D0=B8=D1=82=D1=8C=20[Migration]=20=D0=B0=D1=82=D1=80?= =?UTF-8?q?=D0=B8=D0=B1=D1=83=D1=82=20=D0=B4=D0=BB=D1=8F=20Phase5c=20?= =?UTF-8?q?=E2=80=94=20=D0=B1=D0=B5=D0=B7=20=D0=BD=D0=B5=D0=B3=D0=BE=20Mig?= =?UTF-8?q?rate()=20=D0=BD=D0=B5=20=D0=BD=D0=B0=D1=85=D0=BE=D0=B4=D0=B8?= =?UTF-8?q?=D1=82=20=D0=BC=D0=B8=D0=B3=D1=80=D0=B0=D1=86=D0=B8=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit stage api зашёл в crash-loop после деплоя phase5c: DevDataSeeder упал с «column IsActive does not exist», потому что миграция Phase5c не была подхвачена db.Database.Migrate(). EF Core ищет миграции по [MigrationAttribute] на классе (или Designer-файле, который этот атрибут содержит). Без него миграция в сборке есть, но не известна runtime-механизму. Также чиню e2e: URL единиц был /api/catalog/units (404), правильный — /api/catalog/units-of-measure. --- .../Migrations/20260508000000_Phase5c_UnitsOfMeasureGlobal.cs | 4 ++++ tests/e2e/scenarios/full-cycle.steps.ts | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/food-market.infrastructure/Persistence/Migrations/20260508000000_Phase5c_UnitsOfMeasureGlobal.cs b/src/food-market.infrastructure/Persistence/Migrations/20260508000000_Phase5c_UnitsOfMeasureGlobal.cs index 5692cdf..e866547 100644 --- a/src/food-market.infrastructure/Persistence/Migrations/20260508000000_Phase5c_UnitsOfMeasureGlobal.cs +++ b/src/food-market.infrastructure/Persistence/Migrations/20260508000000_Phase5c_UnitsOfMeasureGlobal.cs @@ -1,4 +1,6 @@ +using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Migrations; +using foodmarket.Infrastructure.Persistence; #nullable disable @@ -22,6 +24,8 @@ namespace foodmarket.Infrastructure.Persistence.Migrations /// /// Безопасно для prod: products FK (OnDelete=Restrict) не падает /// благодаря шагу 3 перед DELETE на шаге 4. + [DbContext(typeof(AppDbContext))] + [Migration("20260508000000_Phase5c_UnitsOfMeasureGlobal")] public partial class Phase5c_UnitsOfMeasureGlobal : Migration { protected override void Up(MigrationBuilder b) diff --git a/tests/e2e/scenarios/full-cycle.steps.ts b/tests/e2e/scenarios/full-cycle.steps.ts index a6edd6d..0fe74c8 100644 --- a/tests/e2e/scenarios/full-cycle.steps.ts +++ b/tests/e2e/scenarios/full-cycle.steps.ts @@ -459,7 +459,7 @@ export async function step08_create_supply({ ctx, step, report }: StepCtx) { if (items.length < 3) { report.gap('Реестр products tenant-scoped: новая org стартует с пустым каталогом, хотя в БД лежат products другой org. e2e-сценарий компенсирует созданием 3 products через API.') // Получим первую unit-of-measure (системную или из org). - const unitsRes = await api.get('/api/catalog/units?pageSize=10') + const unitsRes = await api.get('/api/catalog/units-of-measure?pageSize=10') const unit = (unitsRes.data?.items ?? [])[0] as { id: string; name: string } | undefined if (!unit) { report.bug({