Миграции базы данных¶
Схема базы данных версионируется Alembic. При запуске API и отдельного worker функция init_db() применяет миграции до текущей версии. Новая БД получает схему из базовой ревизии; существующая legacy-БД принимается за эту ревизию без пересоздания таблиц и потери данных.
Базы, созданные до внедрения Alembic, автоматически принимаются за базовую ревизию 0001_baseline, если присутствует полный набор таблиц legacy-схемы; при частичной схеме запуск завершится явной ошибкой. После отметки применяются последующие миграции. Новые таблицы схемы добавляются только миграциями, а не Base.metadata.create_all, чтобы история изменений оставалась управляемой.
Ревизии находятся в apps/api/migrations/versions/. Новую ревизию можно создать командой alembic revision -m "описание изменения", предварительно задав DATABASE_URL для целевой БД. Применение выполняется командой alembic upgrade head; для существующей БД до Alembic сначала один раз запустите приложение, чтобы оно отметило базовую ревизию и применило новые изменения. В Docker Compose API запускается до worker, поэтому миграция завершается до старта worker. В окружении с несколькими репликами миграцию следует применять один раз отдельным шагом развёртывания до масштабирования приложения.
Ревизия 0003_workflow (T19) добавляет заявки v2 (loan_applications) и журнал действий (application_events), а хранилище фактов application_facts пересоздаёт со ссылкой на loan_applications вместо таблицы v1 applications. До T19 факты никто не записывал, поэтому данные не теряются.
Ревизия 0004_staff_actions (T20) добавляет должность сотрудника users.staff_position (underwriter / risk_manager) и loan_applications.pending_review — решение комитета, которое ждёт второй подписи. Обе колонки допускают NULL: сотрудник без должности считается андеррайтером.
Ревизия 0005_closing (T21) добавляет loan_applications.closing — документы, подпись, отлагательные условия и выдачу заявки (DISBURSEMENT.md). Колонка допускает NULL: до выбора предложения её нет.
Ревизия 0006_preapprovals (T22) добавляет таблицу preapprovals: последний результат предодобрения овердрафта по каждому ИНН (PREAPPROVAL.md).
Ревизия 0007_statements (T23) добавляет loan_applications.statements — выписки других банков, которые клиент загрузил в ответ на запрос данных (STATEMENTS.md). NULL — клиент ещё не отвечал на запрос, [] — продолжил без выписки.
После удаления кода v1 (T38) исторические миграции и таблицы surveys, applications, submission_keys, documents, jobs сохранены для совместимости и сохранности данных. Текущий API и worker их не используют; ORM-модели v1 удалены.
Ревизия 0008_mock_source_config хранит настройки восьми мок-источников, версию и сведения о последнем изменении для панели /organizers. Начальная пустая конфигурация сохраняет поведение .env.