From 2f9e2f0dc54fd45164561583fed4e6df3e3c42ee Mon Sep 17 00:00:00 2001 From: David Gwilliam Date: Tue, 31 Mar 2026 03:38:43 -0700 Subject: [PATCH] feat: add database migration for rating system tables --- .../migration.sql | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 prisma/migrations/20260331102802_add_rating_systems/migration.sql diff --git a/prisma/migrations/20260331102802_add_rating_systems/migration.sql b/prisma/migrations/20260331102802_add_rating_systems/migration.sql new file mode 100644 index 0000000..5423709 --- /dev/null +++ b/prisma/migrations/20260331102802_add_rating_systems/migration.sql @@ -0,0 +1,69 @@ +-- CreateTable +CREATE TABLE "elo_ratings" ( + "id" SERIAL NOT NULL, + "playerId" INTEGER NOT NULL, + "rating" INTEGER NOT NULL DEFAULT 1000, + "volatility" DOUBLE PRECISION NOT NULL DEFAULT 0, + "gamesPlayed" INTEGER NOT NULL DEFAULT 0, + "wins" INTEGER NOT NULL DEFAULT 0, + "losses" INTEGER NOT NULL DEFAULT 0, + "draws" INTEGER NOT NULL DEFAULT 0, + "lastUpdated" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "elo_ratings_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "glicko2_ratings" ( + "id" SERIAL NOT NULL, + "playerId" INTEGER NOT NULL, + "rating" DOUBLE PRECISION NOT NULL DEFAULT 1500.0, + "deviation" DOUBLE PRECISION NOT NULL DEFAULT 350.0, + "volatility" DOUBLE PRECISION NOT NULL DEFAULT 0.05, + "gamesPlayed" INTEGER NOT NULL DEFAULT 0, + "wins" INTEGER NOT NULL DEFAULT 0, + "losses" INTEGER NOT NULL DEFAULT 0, + "draws" INTEGER NOT NULL DEFAULT 0, + "lastUpdated" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "glicko2_ratings_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "open_skill_ratings" ( + "id" SERIAL NOT NULL, + "playerId" INTEGER NOT NULL, + "rating" DOUBLE PRECISION NOT NULL DEFAULT 25.0, + "deviation" DOUBLE PRECISION NOT NULL DEFAULT 8.33, + "gamesPlayed" INTEGER NOT NULL DEFAULT 0, + "wins" INTEGER NOT NULL DEFAULT 0, + "losses" INTEGER NOT NULL DEFAULT 0, + "draws" INTEGER NOT NULL DEFAULT 0, + "lastUpdated" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "open_skill_ratings_pkey" PRIMARY KEY ("id") +); + +-- CreateIndex +CREATE UNIQUE INDEX "elo_ratings_playerId_key" ON "elo_ratings"("playerId"); + +-- CreateIndex +CREATE UNIQUE INDEX "glicko2_ratings_playerId_key" ON "glicko2_ratings"("playerId"); + +-- CreateIndex +CREATE UNIQUE INDEX "open_skill_ratings_playerId_key" ON "open_skill_ratings"("playerId"); + +-- AddForeignKey +ALTER TABLE "elo_ratings" ADD CONSTRAINT "elo_ratings_playerId_fkey" FOREIGN KEY ("playerId") REFERENCES "players"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "glicko2_ratings" ADD CONSTRAINT "glicko2_ratings_playerId_fkey" FOREIGN KEY ("playerId") REFERENCES "players"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "open_skill_ratings" ADD CONSTRAINT "open_skill_ratings_playerId_fkey" FOREIGN KEY ("playerId") REFERENCES "players"("id") ON DELETE CASCADE ON UPDATE CASCADE;