@opprs/db-prisma 2.3.0 → 2.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opprs/db-prisma",
3
- "version": "2.3.0",
3
+ "version": "2.6.0",
4
4
  "description": "Database backend for OPPR (Open Pinball Player Ranking System) using Prisma and PostgreSQL",
5
5
  "keywords": [
6
6
  "oppr",
@@ -0,0 +1,45 @@
1
+ -- CreateTable
2
+ CREATE TABLE "Location" (
3
+ "id" TEXT NOT NULL,
4
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
5
+ "updatedAt" TIMESTAMP(3) NOT NULL,
6
+ "externalId" TEXT,
7
+ "name" TEXT NOT NULL,
8
+ "address" TEXT,
9
+ "city" TEXT,
10
+ "state" TEXT,
11
+ "country" TEXT,
12
+
13
+ CONSTRAINT "Location_pkey" PRIMARY KEY ("id")
14
+ );
15
+
16
+ -- CreateIndex
17
+ CREATE UNIQUE INDEX "Location_externalId_key" ON "Location"("externalId");
18
+
19
+ -- CreateIndex
20
+ CREATE INDEX "Location_externalId_idx" ON "Location"("externalId");
21
+
22
+ -- CreateIndex
23
+ CREATE INDEX "Location_name_idx" ON "Location"("name");
24
+
25
+ -- CreateIndex
26
+ CREATE INDEX "Location_city_idx" ON "Location"("city");
27
+
28
+ -- AlterTable: Add new columns to Tournament
29
+ ALTER TABLE "Tournament" ADD COLUMN "description" VARCHAR(2000);
30
+ ALTER TABLE "Tournament" ADD COLUMN "locationId" TEXT;
31
+ ALTER TABLE "Tournament" ADD COLUMN "organizerId" TEXT;
32
+
33
+ -- DropColumn: Remove old location string column (replaced by Location relation)
34
+ ALTER TABLE "Tournament" DROP COLUMN IF EXISTS "location";
35
+
36
+ -- CreateIndex for new Tournament columns
37
+ CREATE INDEX "Tournament_locationId_idx" ON "Tournament"("locationId");
38
+
39
+ CREATE INDEX "Tournament_organizerId_idx" ON "Tournament"("organizerId");
40
+
41
+ -- AddForeignKey: Tournament -> Location
42
+ ALTER TABLE "Tournament" ADD CONSTRAINT "Tournament_locationId_fkey" FOREIGN KEY ("locationId") REFERENCES "Location"("id") ON DELETE SET NULL ON UPDATE CASCADE;
43
+
44
+ -- AddForeignKey: Tournament -> Player (organizer)
45
+ ALTER TABLE "Tournament" ADD CONSTRAINT "Tournament_organizerId_fkey" FOREIGN KEY ("organizerId") REFERENCES "Player"("id") ON DELETE SET NULL ON UPDATE CASCADE;
@@ -0,0 +1,19 @@
1
+ /*
2
+ Warnings:
3
+
4
+ - You are about to drop the column `email` on the `Player` table. All the data in the column will be lost.
5
+
6
+ */
7
+ -- DropIndex
8
+ DROP INDEX "Player_email_idx";
9
+
10
+ -- DropIndex
11
+ DROP INDEX "Player_email_key";
12
+
13
+ -- AlterTable
14
+ ALTER TABLE "Player" DROP COLUMN "email";
15
+
16
+ -- AlterTable
17
+ ALTER TABLE "User" ADD COLUMN "codeOfConductAcceptedAt" TIMESTAMP(3),
18
+ ADD COLUMN "privacyPolicyAcceptedAt" TIMESTAMP(3),
19
+ ADD COLUMN "tosAcceptedAt" TIMESTAMP(3);
@@ -0,0 +1,137 @@
1
+ /*
2
+ Warnings:
3
+
4
+ - You are about to drop the `TournamentResult` table. If the table is not empty, all the data it contains will be lost.
5
+
6
+ */
7
+ -- CreateEnum
8
+ CREATE TYPE "MatchResult" AS ENUM ('WIN', 'LOSS', 'TIE');
9
+
10
+ -- DropForeignKey
11
+ ALTER TABLE "TournamentResult" DROP CONSTRAINT "TournamentResult_playerId_fkey";
12
+
13
+ -- DropForeignKey
14
+ ALTER TABLE "TournamentResult" DROP CONSTRAINT "TournamentResult_tournamentId_fkey";
15
+
16
+ -- DropTable
17
+ DROP TABLE "TournamentResult";
18
+
19
+ -- CreateTable
20
+ CREATE TABLE "Round" (
21
+ "id" TEXT NOT NULL,
22
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
23
+ "updatedAt" TIMESTAMP(3) NOT NULL,
24
+ "tournamentId" TEXT NOT NULL,
25
+ "number" INTEGER NOT NULL,
26
+ "name" TEXT,
27
+ "isFinals" BOOLEAN NOT NULL DEFAULT false,
28
+
29
+ CONSTRAINT "Round_pkey" PRIMARY KEY ("id")
30
+ );
31
+
32
+ -- CreateTable
33
+ CREATE TABLE "Match" (
34
+ "id" TEXT NOT NULL,
35
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
36
+ "updatedAt" TIMESTAMP(3) NOT NULL,
37
+ "tournamentId" TEXT NOT NULL,
38
+ "roundId" TEXT,
39
+ "number" INTEGER,
40
+ "machineName" TEXT,
41
+
42
+ CONSTRAINT "Match_pkey" PRIMARY KEY ("id")
43
+ );
44
+
45
+ -- CreateTable
46
+ CREATE TABLE "Entry" (
47
+ "id" TEXT NOT NULL,
48
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
49
+ "updatedAt" TIMESTAMP(3) NOT NULL,
50
+ "matchId" TEXT NOT NULL,
51
+ "playerId" TEXT NOT NULL,
52
+ "result" "MatchResult" NOT NULL,
53
+ "position" INTEGER,
54
+
55
+ CONSTRAINT "Entry_pkey" PRIMARY KEY ("id")
56
+ );
57
+
58
+ -- CreateTable
59
+ CREATE TABLE "Standing" (
60
+ "id" TEXT NOT NULL,
61
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
62
+ "updatedAt" TIMESTAMP(3) NOT NULL,
63
+ "tournamentId" TEXT NOT NULL,
64
+ "playerId" TEXT NOT NULL,
65
+ "position" INTEGER NOT NULL,
66
+ "isFinals" BOOLEAN NOT NULL DEFAULT false,
67
+ "optedOut" BOOLEAN NOT NULL DEFAULT false,
68
+ "linearPoints" DOUBLE PRECISION DEFAULT 0,
69
+ "dynamicPoints" DOUBLE PRECISION DEFAULT 0,
70
+ "totalPoints" DOUBLE PRECISION,
71
+ "ageInDays" INTEGER DEFAULT 0,
72
+ "decayMultiplier" DOUBLE PRECISION DEFAULT 1.0,
73
+ "decayedPoints" DOUBLE PRECISION,
74
+ "efficiency" DOUBLE PRECISION,
75
+
76
+ CONSTRAINT "Standing_pkey" PRIMARY KEY ("id")
77
+ );
78
+
79
+ -- CreateIndex
80
+ CREATE INDEX "Round_tournamentId_idx" ON "Round"("tournamentId");
81
+
82
+ -- CreateIndex
83
+ CREATE INDEX "Round_tournamentId_isFinals_idx" ON "Round"("tournamentId", "isFinals");
84
+
85
+ -- CreateIndex
86
+ CREATE UNIQUE INDEX "Round_tournamentId_number_isFinals_key" ON "Round"("tournamentId", "number", "isFinals");
87
+
88
+ -- CreateIndex
89
+ CREATE INDEX "Match_tournamentId_idx" ON "Match"("tournamentId");
90
+
91
+ -- CreateIndex
92
+ CREATE INDEX "Match_roundId_idx" ON "Match"("roundId");
93
+
94
+ -- CreateIndex
95
+ CREATE INDEX "Entry_matchId_idx" ON "Entry"("matchId");
96
+
97
+ -- CreateIndex
98
+ CREATE INDEX "Entry_playerId_idx" ON "Entry"("playerId");
99
+
100
+ -- CreateIndex
101
+ CREATE UNIQUE INDEX "Entry_matchId_playerId_key" ON "Entry"("matchId", "playerId");
102
+
103
+ -- CreateIndex
104
+ CREATE INDEX "Standing_playerId_idx" ON "Standing"("playerId");
105
+
106
+ -- CreateIndex
107
+ CREATE INDEX "Standing_tournamentId_idx" ON "Standing"("tournamentId");
108
+
109
+ -- CreateIndex
110
+ CREATE INDEX "Standing_tournamentId_isFinals_idx" ON "Standing"("tournamentId", "isFinals");
111
+
112
+ -- CreateIndex
113
+ CREATE INDEX "Standing_position_idx" ON "Standing"("position");
114
+
115
+ -- CreateIndex
116
+ CREATE UNIQUE INDEX "Standing_playerId_tournamentId_isFinals_key" ON "Standing"("playerId", "tournamentId", "isFinals");
117
+
118
+ -- AddForeignKey
119
+ ALTER TABLE "Round" ADD CONSTRAINT "Round_tournamentId_fkey" FOREIGN KEY ("tournamentId") REFERENCES "Tournament"("id") ON DELETE CASCADE ON UPDATE CASCADE;
120
+
121
+ -- AddForeignKey
122
+ ALTER TABLE "Match" ADD CONSTRAINT "Match_tournamentId_fkey" FOREIGN KEY ("tournamentId") REFERENCES "Tournament"("id") ON DELETE CASCADE ON UPDATE CASCADE;
123
+
124
+ -- AddForeignKey
125
+ ALTER TABLE "Match" ADD CONSTRAINT "Match_roundId_fkey" FOREIGN KEY ("roundId") REFERENCES "Round"("id") ON DELETE SET NULL ON UPDATE CASCADE;
126
+
127
+ -- AddForeignKey
128
+ ALTER TABLE "Entry" ADD CONSTRAINT "Entry_matchId_fkey" FOREIGN KEY ("matchId") REFERENCES "Match"("id") ON DELETE CASCADE ON UPDATE CASCADE;
129
+
130
+ -- AddForeignKey
131
+ ALTER TABLE "Entry" ADD CONSTRAINT "Entry_playerId_fkey" FOREIGN KEY ("playerId") REFERENCES "Player"("id") ON DELETE CASCADE ON UPDATE CASCADE;
132
+
133
+ -- AddForeignKey
134
+ ALTER TABLE "Standing" ADD CONSTRAINT "Standing_tournamentId_fkey" FOREIGN KEY ("tournamentId") REFERENCES "Tournament"("id") ON DELETE CASCADE ON UPDATE CASCADE;
135
+
136
+ -- AddForeignKey
137
+ ALTER TABLE "Standing" ADD CONSTRAINT "Standing_playerId_fkey" FOREIGN KEY ("playerId") REFERENCES "Player"("id") ON DELETE CASCADE ON UPDATE CASCADE;
@@ -0,0 +1,108 @@
1
+ -- CreateEnum
2
+ CREATE TYPE "OpprRankingChangeType" AS ENUM ('INITIAL', 'TOURNAMENT_RESULT', 'RANKING_REFRESH', 'RD_DECAY', 'MANUAL_ADJUSTMENT');
3
+
4
+ -- CreateTable
5
+ CREATE TABLE "OpprPlayerRanking" (
6
+ "id" TEXT NOT NULL,
7
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
8
+ "updatedAt" TIMESTAMP(3) NOT NULL,
9
+ "playerId" TEXT NOT NULL,
10
+ "rating" DOUBLE PRECISION NOT NULL DEFAULT 1500,
11
+ "ratingDeviation" DOUBLE PRECISION NOT NULL DEFAULT 200,
12
+ "lastRatingUpdate" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
13
+ "ranking" INTEGER,
14
+ "isRated" BOOLEAN NOT NULL DEFAULT false,
15
+
16
+ CONSTRAINT "OpprPlayerRanking_pkey" PRIMARY KEY ("id")
17
+ );
18
+
19
+ -- CreateTable
20
+ CREATE TABLE "OpprRankingHistory" (
21
+ "id" TEXT NOT NULL,
22
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
23
+ "opprPlayerRankingId" TEXT NOT NULL,
24
+ "rating" DOUBLE PRECISION NOT NULL,
25
+ "ratingDeviation" DOUBLE PRECISION NOT NULL,
26
+ "ranking" INTEGER,
27
+ "isRated" BOOLEAN NOT NULL,
28
+ "changeType" "OpprRankingChangeType" NOT NULL,
29
+ "tournamentId" TEXT,
30
+ "notes" VARCHAR(500),
31
+
32
+ CONSTRAINT "OpprRankingHistory_pkey" PRIMARY KEY ("id")
33
+ );
34
+
35
+ -- CreateIndex
36
+ CREATE UNIQUE INDEX "OpprPlayerRanking_playerId_key" ON "OpprPlayerRanking"("playerId");
37
+
38
+ -- CreateIndex
39
+ CREATE INDEX "OpprPlayerRanking_playerId_idx" ON "OpprPlayerRanking"("playerId");
40
+
41
+ -- CreateIndex
42
+ CREATE INDEX "OpprPlayerRanking_rating_idx" ON "OpprPlayerRanking"("rating");
43
+
44
+ -- CreateIndex
45
+ CREATE INDEX "OpprPlayerRanking_ranking_idx" ON "OpprPlayerRanking"("ranking");
46
+
47
+ -- CreateIndex
48
+ CREATE INDEX "OpprPlayerRanking_isRated_idx" ON "OpprPlayerRanking"("isRated");
49
+
50
+ -- CreateIndex
51
+ CREATE INDEX "OpprRankingHistory_opprPlayerRankingId_idx" ON "OpprRankingHistory"("opprPlayerRankingId");
52
+
53
+ -- CreateIndex
54
+ CREATE INDEX "OpprRankingHistory_createdAt_idx" ON "OpprRankingHistory"("createdAt");
55
+
56
+ -- CreateIndex
57
+ CREATE INDEX "OpprRankingHistory_tournamentId_idx" ON "OpprRankingHistory"("tournamentId");
58
+
59
+ -- CreateIndex
60
+ CREATE INDEX "OpprRankingHistory_opprPlayerRankingId_createdAt_idx" ON "OpprRankingHistory"("opprPlayerRankingId", "createdAt");
61
+
62
+ -- AddForeignKey
63
+ ALTER TABLE "OpprPlayerRanking" ADD CONSTRAINT "OpprPlayerRanking_playerId_fkey" FOREIGN KEY ("playerId") REFERENCES "Player"("id") ON DELETE CASCADE ON UPDATE CASCADE;
64
+
65
+ -- AddForeignKey
66
+ ALTER TABLE "OpprRankingHistory" ADD CONSTRAINT "OpprRankingHistory_opprPlayerRankingId_fkey" FOREIGN KEY ("opprPlayerRankingId") REFERENCES "OpprPlayerRanking"("id") ON DELETE CASCADE ON UPDATE CASCADE;
67
+
68
+ -- AddForeignKey
69
+ ALTER TABLE "OpprRankingHistory" ADD CONSTRAINT "OpprRankingHistory_tournamentId_fkey" FOREIGN KEY ("tournamentId") REFERENCES "Tournament"("id") ON DELETE SET NULL ON UPDATE CASCADE;
70
+
71
+ -- Migrate existing Player rating data to OpprPlayerRanking
72
+ INSERT INTO "OpprPlayerRanking" ("id", "createdAt", "updatedAt", "playerId", "rating", "ratingDeviation", "lastRatingUpdate", "ranking", "isRated")
73
+ SELECT
74
+ gen_random_uuid()::text,
75
+ NOW(),
76
+ NOW(),
77
+ "id",
78
+ "rating",
79
+ "ratingDeviation",
80
+ "lastRatingUpdate",
81
+ "ranking",
82
+ "isRated"
83
+ FROM "Player";
84
+
85
+ -- Create initial history records for all migrated rankings
86
+ INSERT INTO "OpprRankingHistory" ("id", "createdAt", "opprPlayerRankingId", "rating", "ratingDeviation", "ranking", "isRated", "changeType", "notes")
87
+ SELECT
88
+ gen_random_uuid()::text,
89
+ NOW(),
90
+ opr."id",
91
+ opr."rating",
92
+ opr."ratingDeviation",
93
+ opr."ranking",
94
+ opr."isRated",
95
+ 'INITIAL',
96
+ 'Migrated from Player model'
97
+ FROM "OpprPlayerRanking" opr;
98
+
99
+ -- Drop old indexes from Player table
100
+ DROP INDEX IF EXISTS "Player_rating_idx";
101
+ DROP INDEX IF EXISTS "Player_ranking_idx";
102
+
103
+ -- Remove old columns from Player table
104
+ ALTER TABLE "Player" DROP COLUMN "rating";
105
+ ALTER TABLE "Player" DROP COLUMN "ratingDeviation";
106
+ ALTER TABLE "Player" DROP COLUMN "ranking";
107
+ ALTER TABLE "Player" DROP COLUMN "isRated";
108
+ ALTER TABLE "Player" DROP COLUMN "lastRatingUpdate";
@@ -0,0 +1,5 @@
1
+ -- CreateEnum
2
+ CREATE TYPE "TournamentFormatType" AS ENUM ('SINGLE_ELIMINATION', 'DOUBLE_ELIMINATION', 'MATCH_PLAY', 'BEST_GAME', 'CARD_QUALIFYING', 'PIN_GOLF', 'FLIP_FRENZY', 'STRIKE_FORMAT', 'TARGET_MATCH_PLAY', 'HYBRID', 'NONE');
3
+
4
+ -- AlterTable
5
+ ALTER TABLE "Tournament" ADD COLUMN "qualifyingFormat" "TournamentFormatType" NOT NULL DEFAULT 'NONE';
@@ -0,0 +1,2 @@
1
+ -- AlterTable: Add externalUrl column to Tournament
2
+ ALTER TABLE "Tournament" ADD COLUMN "externalUrl" TEXT;