CrewsForge — Шаг 8: План миграции (упрощён)
Статус: подтверждено 2026-08-21 · Шаг 8 из 9 Решение Stark: данные в БД тестовые, их практически нет — старое дропаем, схему создаём сразу целевой. Expand/backfill/contract-цикл из первой редакции снят как избыточный.
1. Подход: чистый baseline
Заголовок раздела «1. Подход: чистый baseline»pg_dumpодин раз — не ради отката, а как архив на случай «а что там было» (дёшево).- Squash миграций: история Prisma-миграций схлопывается в один baseline,
schema.prismaпишется сразу в целевом виде (шаг 2 + дельты шагов 6–7:templateVersion/documentHashна Contract, ConciergeThread/Message, частичный уникальный индекс QueueItem). Никакихstatus_v2, временных enum’ов и маппингов старых статусов — старыйProjectStatusпросто не существует в baseline. - Raw-SQL в baseline-миграции: CHECK-констрейнт Settlement (шаг 2.13), частичный индекс QueueItem (шаг 7.2).
prisma migrate resetна dev/staging → сиды.- Прод (закрытая бета): согласованное окно, drop схемы, baseline, сиды, редеплой всех сервисов разом (единая схема — смешанных версий кода быть не должно).
2. Сиды baseline
Заголовок раздела «2. Сиды baseline»- Роли: CUSTOMER, EMPLOYEE, ADMIN, OPERATOR, ARBITER.
- Конфиги: календарь платформы (UTC, 10–18, пн–пт), SLA-сроки (таблица 8.2 ФТ), окна (5/5/5 дней, конверт 14), комиссия-дефолт 1500 bps, порог бюджета $15k, порог LCIA (TBD).
- Справочники: существующие сиды гео/языков/навыков переезжают без изменений.
- Тестовые фикстуры dev: фаундер, команда с ролями/полномочиями, проект в паре опорных состояний — для ручной проверки и e2e.
3. Что сохраняет актуальность из первой редакции
Заголовок раздела «3. Что сохраняет актуальность из первой редакции»| Пункт | Статус |
|---|---|
| Список ломающих изменений API для фронтенда (переходы вместо PATCH status, новые enum’ы, обязательная currency, операторские DTO без денег) | Актуален — передать команде фронта до переключения |
Удаление PROJECT_STATUS_TRANSITIONS, ProjectUpdateStatusDto, PATCH-маршрутов статуса (project-api и admin-api) | Выполнено в F2 (правка 2026-08-30, подтверждена Stark’ом): смена enum’а не оставляет старой таблице переходов возможности скомпилироваться, поэтому поверхность снимается вместе с baseline, а не в P1. В admin-api отдельного PATCH-маршрута статуса не было — удалено поле status в AdminProjectUpdateDto |
| Политика RESTRICT вместо Cascade на сделочной цепочке | Актуальна — теперь просто пишется в baseline сразу, отдельной фазы не нужно |
| Чек-лист верификации после переключения (инварианты-тесты, журнал+outbox на смоук-переходах, отсутствие Cascade на пути Project→Settlement, SQL-проверкой) | Актуален — раздел 5 первой редакции, без пунктов про старые данные |
4. Следствие для шага 9
Заголовок раздела «4. Следствие для шага 9»Эпик F4 упрощается: «Expand-миграции + backfill со стоп-проверкой» → «Baseline-схема + сиды», размер M → S. Критический путь не меняется.