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 { integer, pgTable, text, unique } from 'drizzle-orm/pg-core';
import { integer, text, unique } from 'drizzle-orm/pg-core';
import { siteSchema } from './schemas';
import { id, timestamps } from './helpers';
export const tasks = pgTable('tasks', {
export const tasks = siteSchema.table('tasks', {
id: id(),
name: text('name').notNull(),
currentPoints: integer('current_points').notNull().default(0),
@@ -10,15 +11,15 @@ export const tasks = pgTable('tasks', {
...timestamps
});
export const topics = pgTable('topics', {
export const topics = siteSchema.table('topics', {
id: id(),
name: text('name').notNull(),
emoji: text('emoji'),
...timestamps
});
export const tasksToTopics = pgTable(
'tasks_to_topics',
export const tasksToTopics = siteSchema.table(
'task_topics',
{
id: id(),
taskId: integer('task_id')