July 7 - Fix alembic script errors

This commit is contained in:
2026-07-07 10:34:06 -04:00
parent e578fb6ca1
commit f84dc3d020
2 changed files with 4 additions and 3 deletions
+3 -2
View File
@@ -701,7 +701,7 @@ phase1_projects_roles → phase6_features → phase7_mobile_api → phase8_notif
→ phase30_device_registry
→ phase31_device_registry
→ phase32_device_token_columns
→ phase33_contract_notify_recipients ← HEAD
→ phase33_contract_recipients ← HEAD
```
### phase21_performance_indexes
@@ -776,7 +776,7 @@ These three migrations are the history of a **false start** in device tracking.
**The dead `DeviceRegistration` model, `app/api/devices.py` endpoint, and `api_devices` blueprint were removed (July 2026).** They defined a *second* `POST /api/v1/devices/register` that was shadowed at routing time by the `api_auth` copy and would have crashed anyway (it queried the dropped `device_registrations` table). Device registration now has a single implementation: `register_device()` in `app/api/auth.py`, writing to `api_device_tokens`. Do not reintroduce a competing device model or a duplicate register route.
### phase33_contract_notify_recipients
### phase33_contract_recipients
Creates the `contract_notification_recipients` table backing **per-contract additional notification recipients** (see §5 `ContractNotificationRecipient` and §11). Uses table existence check — safe to re-run.
@@ -821,6 +821,7 @@ ALTER TABLE users MODIFY COLUMN role ENUM('admin','director',...) NOT NULL;
### MySQL Compatibility Rules
- **Revision ids must be ≤ 32 characters.** Alembic's `alembic_version.version_num` column is `VARCHAR(32)`. A longer `revision = '...'` value passes `flask db upgrade`'s DDL step but fails when Alembic writes the version row (`Data too long for column 'version_num'`), often leaving the schema changed but the version un-recorded. The *filename* may be longer (e.g. `phase24_issue_created_notify_defaults.py`), but the `revision` id inside must be short (`phase24_notify_defaults`). Count before committing a new migration.
- **`CREATE INDEX IF NOT EXISTS`** — not supported on MySQL < 8.0.12. Always use `INFORMATION_SCHEMA.STATISTICS` check first.
- **`batch_alter_table`** — SQLite-only workaround; do not use for MySQL migrations.
- **Migration deploy order:** Always run `flask db upgrade` before swapping `app/__init__.py` if the new version imports models that reference the new columns.