feat(schema): M4.1 — tenant_registry schema + migrate binary
PLATFORM_ARCHITECTURE.md §5c schema as one initial migration: 6 tables + 4 enums + updated_at triggers. cmd/migrate binary (golang-migrate library, embedded SQL). testcontainers round-trip + seed + slug-constraint tests. Refs: M4.1
This commit was merged in pull request #6.
This commit is contained in:
@@ -64,7 +64,39 @@ The skeleton's store is in-memory and pre-seeded with one tenant:
|
||||
|
||||
So `curl http://localhost:8090/v1/tenants/by-slug/acme` works the moment `make dev` is up.
|
||||
|
||||
The full schema (tenants, tenant_products, audit_log) is committed at `migrations/0001_init.up.sql` for review, but unapplied until the M4.1 follow-up PR swaps the in-memory store for pgx-backed Postgres.
|
||||
The full schema (6 tables: `tenants`, `tenant_projects`, `tenant_products`, `tenant_idp_config`, `api_keys`, `audit_log` — per `PLATFORM_ARCHITECTURE.md §5c`) lives at `migrations/0001_init.up.sql`. The handler-layer in-memory store is still wired in by default; the pgx-backed store + the full REST surface lands in **M4.2**.
|
||||
|
||||
## Schema migrations (M4.1)
|
||||
|
||||
```bash
|
||||
# Apply all pending migrations against the dev Postgres (assumes
|
||||
# `make dev-up` in platform/orca-platform is running):
|
||||
make migrate-up
|
||||
|
||||
# Inspect current version:
|
||||
make migrate-version
|
||||
|
||||
# Roll back the most recent migration:
|
||||
make migrate-down
|
||||
|
||||
# Wipe everything (DESTRUCTIVE — only safe against a dev DB):
|
||||
make migrate-down-all
|
||||
|
||||
# Create the next pair of empty migration files:
|
||||
make migrate-create NAME=add_team_table
|
||||
```
|
||||
|
||||
Migrations are embedded into both `cmd/server` and `cmd/migrate` via `migrations/embed.go`. In production, `cmd/migrate` ships as an Orca init container so the schema is applied before the API server starts (`IMPLEMENTATION_PLAN.md §1.7`: migrations are forward-only and run as an init container before the service).
|
||||
|
||||
The migrations package ships three integration tests (require Docker):
|
||||
|
||||
| Test | What it asserts |
|
||||
|---|---|
|
||||
| `TestMigrate_upDownRoundTrip` | up → all 6 tables + 4 enums exist; down → schema empty; up again succeeds |
|
||||
| `TestSeed_canInsertAndQuery` | end-to-end insert across all 6 tables, FK cascade behaviour, `audit_log` SET-NULL on tenant delete |
|
||||
| `TestSlugConstraint` | tenant slug regex enforced (rejects too-short / leading dash / uppercase / underscore) |
|
||||
|
||||
Run them with `make test`. Use `make test-short` in environments without Docker.
|
||||
|
||||
## Deployment
|
||||
|
||||
|
||||
Reference in New Issue
Block a user