|
- import pg from "pg";
-
- const client = new pg.Client({
- host: process.env.PROVISION_HOST,
- port: parseInt(process.env.PROVISION_PORT ?? "5432"),
- user: process.env.PROVISION_USER,
- password: process.env.PROVISION_PASSWORD,
- database: process.env.PROVISION_DATABASE,
- });
-
- await client.connect();
-
- try {
- await client.query(`
- CREATE TABLE IF NOT EXISTS players (
- id TEXT PRIMARY KEY,
- games_played INT NOT NULL DEFAULT 0,
- games_won INT NOT NULL DEFAULT 0,
- games_lost INT NOT NULL DEFAULT 0,
- best_attempts INT,
- current_streak INT NOT NULL DEFAULT 0,
- best_streak INT NOT NULL DEFAULT 0,
- last_played_at TIMESTAMPTZ,
- created_at TIMESTAMPTZ NOT NULL DEFAULT now()
- )
- `);
-
- await client.query(`
- CREATE TABLE IF NOT EXISTS games (
- id BIGSERIAL PRIMARY KEY,
- player_id TEXT NOT NULL REFERENCES players(id) ON DELETE CASCADE,
- target INT NOT NULL,
- attempts INT NOT NULL,
- won BOOLEAN NOT NULL,
- finished_at TIMESTAMPTZ NOT NULL DEFAULT now()
- )
- `);
-
- await client.query(`
- CREATE INDEX IF NOT EXISTS idx_players_scoreboard
- ON players (best_attempts NULLS LAST, last_played_at)
- `);
-
- await client.query(`
- CREATE INDEX IF NOT EXISTS idx_games_player_history
- ON games (player_id, finished_at DESC)
- `);
-
- console.log("[txt-game migration-000] score schema created");
- } finally {
- await client.end();
- }
|