47 lines
2.1 KiB
MySQL
47 lines
2.1 KiB
MySQL
|
|
-- Phase 2: EV Simulation Framework
|
||
|
|
-- Add simulation_status enum + column to sports_seasons
|
||
|
|
-- Add participant_ev_snapshots and team_ev_snapshots tables
|
||
|
|
-- Wrapped in IF NOT EXISTS guards so re-running is safe if partially applied.
|
||
|
|
|
||
|
|
DO $$
|
||
|
|
BEGIN
|
||
|
|
IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'simulation_status') THEN
|
||
|
|
CREATE TYPE "simulation_status" AS ENUM('idle', 'running', 'failed');
|
||
|
|
END IF;
|
||
|
|
END $$;
|
||
|
|
|
||
|
|
ALTER TABLE "sports_seasons" ADD COLUMN IF NOT EXISTS "simulation_status" "simulation_status" NOT NULL DEFAULT 'idle';
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS "participant_ev_snapshots" (
|
||
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
||
|
|
"participant_id" uuid NOT NULL REFERENCES "participants"("id") ON DELETE CASCADE,
|
||
|
|
"sports_season_id" uuid NOT NULL REFERENCES "sports_seasons"("id") ON DELETE CASCADE,
|
||
|
|
"snapshot_date" date NOT NULL,
|
||
|
|
"prob_first" numeric(5, 4) NOT NULL DEFAULT '0',
|
||
|
|
"prob_second" numeric(5, 4) NOT NULL DEFAULT '0',
|
||
|
|
"prob_third" numeric(5, 4) NOT NULL DEFAULT '0',
|
||
|
|
"prob_fourth" numeric(5, 4) NOT NULL DEFAULT '0',
|
||
|
|
"prob_fifth" numeric(5, 4) NOT NULL DEFAULT '0',
|
||
|
|
"prob_sixth" numeric(5, 4) NOT NULL DEFAULT '0',
|
||
|
|
"prob_seventh" numeric(5, 4) NOT NULL DEFAULT '0',
|
||
|
|
"prob_eighth" numeric(5, 4) NOT NULL DEFAULT '0',
|
||
|
|
"calculated_ev" numeric(10, 2) NOT NULL DEFAULT '0',
|
||
|
|
"source" varchar(100) NOT NULL,
|
||
|
|
"created_at" timestamp DEFAULT now() NOT NULL,
|
||
|
|
"updated_at" timestamp DEFAULT now() NOT NULL
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE UNIQUE INDEX IF NOT EXISTS "participant_ev_snapshots_unique" ON "participant_ev_snapshots" ("participant_id", "sports_season_id", "snapshot_date");
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS "team_ev_snapshots" (
|
||
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
||
|
|
"team_id" uuid NOT NULL REFERENCES "teams"("id") ON DELETE CASCADE,
|
||
|
|
"season_id" uuid NOT NULL REFERENCES "seasons"("id") ON DELETE CASCADE,
|
||
|
|
"snapshot_date" date NOT NULL,
|
||
|
|
"projected_points" numeric(10, 2) NOT NULL DEFAULT '0',
|
||
|
|
"actual_points" numeric(10, 2) NOT NULL DEFAULT '0',
|
||
|
|
"created_at" timestamp DEFAULT now() NOT NULL
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE UNIQUE INDEX IF NOT EXISTS "team_ev_snapshots_unique" ON "team_ev_snapshots" ("team_id", "season_id", "snapshot_date");
|