db: Drizzle schemas on domain Postgres schemas, baseline migration, reorg SQL

- pgSchema tables for auth, money, house, ref, games, cs, animaldex, site, meta
  (lists excluded via schemaFilter; runtime list tables are managed by meta.*)
- drizzle/ baseline matches the reorged DB exactly (catalog diff = 0 on rehearsal)
- db/reorg: one-time SQL that moves the flat public schema (rehearsed on a prod copy)
- scripts/db-migrate.ts: migrator with --init to record the baseline and a guard
  against running the baseline on a non-empty, unrecorded database
This commit is contained in:
2026-10-23 22:03:42 +00:00
parent f94e3dc8ac
commit 64fb8df262
29 changed files with 12507 additions and 189 deletions

View File

@@ -1,7 +1,8 @@
import { doublePrecision, integer, pgTable, text } from 'drizzle-orm/pg-core';
import { doublePrecision, integer, text } from 'drizzle-orm/pg-core';
import { animaldexSchema } from './schemas';
import { id, timestamps, timestamptz } from './helpers';
export const animals = pgTable('animals', {
export const animals = animaldexSchema.table('animals', {
id: id(),
species: text('species').notNull(),
@@ -22,7 +23,7 @@ export const animals = pgTable('animals', {
...timestamps
});
export const sightings = pgTable('sightings', {
export const sightings = animaldexSchema.table('sightings', {
id: id(),
animalId: integer('animal_id')
.notNull()
@@ -40,7 +41,7 @@ export const sightings = pgTable('sightings', {
...timestamps
});
export const photos = pgTable('photos', {
export const photos = animaldexSchema.table('sighting_photos', {
id: id(),
sightingId: integer('sighting_id')
.notNull()