diff --git a/entrypoint.sh b/entrypoint.sh index 58a264a..1272b19 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -1,6 +1,45 @@ #!/bin/sh set -e -echo "=== Syncing database schema ===" + +echo "=== Syncing NextAuth schema ===" npx prisma db push --accept-data-loss --skip-generate + +echo "=== Ensuring app tables exist ===" +node -e " +const { Pool } = require('pg'); +const pool = new Pool({ connectionString: process.env.DATABASE_URL, ssl: { rejectUnauthorized: false } }); +pool.query(\` + CREATE EXTENSION IF NOT EXISTS pgcrypto; + CREATE TABLE IF NOT EXISTS fs_users ( + id TEXT PRIMARY KEY DEFAULT gen_random_uuid()::text, + user_id TEXT, + data JSONB NOT NULL DEFAULT '{}'::jsonb, + created_at TIMESTAMP DEFAULT NOW(), + updated_at TIMESTAMP DEFAULT NOW() + ); + CREATE UNIQUE INDEX IF NOT EXISTS idx_fs_users_email_unique ON fs_users ((data->>'email')); + CREATE INDEX IF NOT EXISTS idx_fs_users_user_id ON fs_users (user_id); + CREATE TABLE IF NOT EXISTS fs_projects ( + id TEXT PRIMARY KEY DEFAULT gen_random_uuid()::text, + user_id TEXT REFERENCES fs_users(id) ON DELETE CASCADE, + workspace TEXT, slug TEXT, + data JSONB NOT NULL DEFAULT '{}'::jsonb, + created_at TIMESTAMP DEFAULT NOW(), + updated_at TIMESTAMP DEFAULT NOW() + ); + CREATE INDEX IF NOT EXISTS idx_fs_projects_user_id ON fs_projects (user_id); + CREATE INDEX IF NOT EXISTS idx_fs_projects_slug ON fs_projects (slug); + CREATE TABLE IF NOT EXISTS fs_sessions ( + id TEXT PRIMARY KEY DEFAULT gen_random_uuid()::text, + user_id TEXT REFERENCES fs_users(id) ON DELETE CASCADE, + data JSONB NOT NULL DEFAULT '{}'::jsonb, + created_at TIMESTAMP DEFAULT NOW(), + updated_at TIMESTAMP DEFAULT NOW() + ); + CREATE INDEX IF NOT EXISTS idx_fs_sessions_user_id ON fs_sessions (user_id); + CREATE INDEX IF NOT EXISTS idx_fs_sessions_project_id ON fs_sessions ((data->>'projectId')); +\`).then(() => { console.log('App tables ready'); pool.end(); }).catch(e => { console.error('Table init error:', e.message); pool.end(); }); +" + echo "=== Starting Next.js server ===" exec node server.js