import { pool } from './client.js' export async function ensureDatabaseSchema() { await pool.query(` CREATE TABLE IF NOT EXISTS users ( id SERIAL PRIMARY KEY, email VARCHAR(255) NOT NULL UNIQUE, password_hash VARCHAR(255) NOT NULL, nickname VARCHAR(60) NOT NULL, created_at TIMESTAMPTZ NOT NULL, updated_at TIMESTAMPTZ NOT NULL ); CREATE TABLE IF NOT EXISTS auth_sessions ( id SERIAL PRIMARY KEY, user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE, token_hash VARCHAR(255) NOT NULL UNIQUE, expires_at TIMESTAMPTZ NOT NULL, created_at TIMESTAMPTZ NOT NULL ); CREATE INDEX IF NOT EXISTS auth_sessions_user_id_idx ON auth_sessions (user_id); CREATE TABLE IF NOT EXISTS planner_entries ( id SERIAL PRIMARY KEY, user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE, entry_date VARCHAR(10) NOT NULL, payload JSONB NOT NULL, created_at TIMESTAMPTZ NOT NULL, updated_at TIMESTAMPTZ NOT NULL ); CREATE UNIQUE INDEX IF NOT EXISTS planner_entries_user_date_unique ON planner_entries (user_id, entry_date); CREATE INDEX IF NOT EXISTS planner_entries_user_id_idx ON planner_entries (user_id); CREATE TABLE IF NOT EXISTS goals ( id SERIAL PRIMARY KEY, user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE, title VARCHAR(120) NOT NULL, target_date VARCHAR(10) NOT NULL, active_from VARCHAR(10), active_until VARCHAR(10), color VARCHAR(32) NOT NULL DEFAULT '#1c1917', created_at TIMESTAMPTZ NOT NULL, updated_at TIMESTAMPTZ NOT NULL ); CREATE INDEX IF NOT EXISTS goals_user_id_idx ON goals (user_id); `) }