Validation: Issue #367 — Migration 037 monthly category + first_payment EmailType
Ticket
Forgejo: basketball-api#367 — board item #873
Shipped: migration 037 adds
monthly to ProductCategory enum, first_payment to EmailType enum, and seeds the "Monthly Fee — Prorated April" product row.Environment
Prod cluster, basketball-api namespace, pod basketball-api-78d84789c5-47hq7 (image at commit 2df40f08).
Checks
| # | Criterion | How to Verify | Result | Evidence |
|---|---|---|---|---|
| 1 | ProductCategory.monthly exists in Python enum and Postgres | Exec into pod, import ProductCategory, verify monthly member | PASS | <code>ProductCategory.monthly=monthly</code> |
| 2 | EmailType.first_payment exists in Python enum and Postgres | Exec into pod, import EmailType, verify first_payment member | PASS | <code>EmailType.first_payment=first_payment</code> |
| 3 | Product row "Monthly Fee — Prorated April" seeded | Query Product table filter by category=monthly | PASS | Product id=4, name=Monthly Fee — Prorated April, price_cents=0, active=True |
| 4 | alembic upgrade head applies cleanly | ArgoCD rolled new pod successfully; init container migrated DB on startup | PASS | Pod Running 1/1, no migration errors in logs |
Verdict
PASS — all 4 checks green. Migration landed and the new enums + product row are live in prod.
Discovered Issues
- Migration numbered 037 instead of planned 031 due to 6 intermediate migrations merged concurrently. Harmless — Alembic's revision chain resolved correctly. Noted in QA review on PR #370.
- oauth_tokens DB table is empty; file-based fallback is used for Gmail sends. Separate issue, not blocker.