- Updated Prisma and @prisma/client to version 6.19.2 in package.json and yarn.lock. - Added package extensions for @prisma/client in .yarnrc.yml. - Updated backend README.md for clearer setup instructions. - Created initial migration for Game, Platform, and related tables in Prisma. - Added migration lock file for version control. - Implemented tests for Game model using Vitest, including creation and unique slug constraint checks.
134 lines
3.9 KiB
SQL
134 lines
3.9 KiB
SQL
-- CreateTable
|
|
CREATE TABLE "Game" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"title" TEXT NOT NULL,
|
|
"slug" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"releaseDate" DATETIME,
|
|
"igdbId" INTEGER,
|
|
"rawgId" INTEGER,
|
|
"thegamesdbId" INTEGER,
|
|
"extra" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Platform" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"name" TEXT NOT NULL,
|
|
"slug" TEXT NOT NULL,
|
|
"generation" INTEGER
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "GamePlatform" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"gameId" TEXT NOT NULL,
|
|
"platformId" TEXT NOT NULL,
|
|
CONSTRAINT "GamePlatform_gameId_fkey" FOREIGN KEY ("gameId") REFERENCES "Game" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "GamePlatform_platformId_fkey" FOREIGN KEY ("platformId") REFERENCES "Platform" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "RomFile" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"path" TEXT NOT NULL,
|
|
"filename" TEXT NOT NULL,
|
|
"checksum" TEXT NOT NULL,
|
|
"size" INTEGER NOT NULL,
|
|
"format" TEXT NOT NULL,
|
|
"hashes" TEXT,
|
|
"gameId" TEXT,
|
|
"addedAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"lastSeenAt" DATETIME,
|
|
"status" TEXT NOT NULL DEFAULT 'active',
|
|
CONSTRAINT "RomFile_gameId_fkey" FOREIGN KEY ("gameId") REFERENCES "Game" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Artwork" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"gameId" TEXT NOT NULL,
|
|
"type" TEXT NOT NULL,
|
|
"sourceUrl" TEXT NOT NULL,
|
|
"localPath" TEXT,
|
|
"width" INTEGER,
|
|
"height" INTEGER,
|
|
"fetchedAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "Artwork_gameId_fkey" FOREIGN KEY ("gameId") REFERENCES "Game" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Purchase" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"gameId" TEXT NOT NULL,
|
|
"priceCents" INTEGER NOT NULL,
|
|
"currency" TEXT NOT NULL,
|
|
"store" TEXT,
|
|
"date" DATETIME NOT NULL,
|
|
"receiptPath" TEXT,
|
|
CONSTRAINT "Purchase_gameId_fkey" FOREIGN KEY ("gameId") REFERENCES "Game" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Tag" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"name" TEXT NOT NULL
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "PriceHistory" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"gameId" TEXT NOT NULL,
|
|
"priceCents" INTEGER NOT NULL,
|
|
"currency" TEXT NOT NULL,
|
|
"recordedAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"source" TEXT,
|
|
CONSTRAINT "PriceHistory_gameId_fkey" FOREIGN KEY ("gameId") REFERENCES "Game" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "_GameToTag" (
|
|
"A" TEXT NOT NULL,
|
|
"B" TEXT NOT NULL,
|
|
CONSTRAINT "_GameToTag_A_fkey" FOREIGN KEY ("A") REFERENCES "Game" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
|
CONSTRAINT "_GameToTag_B_fkey" FOREIGN KEY ("B") REFERENCES "Tag" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Game_slug_key" ON "Game"("slug");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Game_igdbId_key" ON "Game"("igdbId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Game_rawgId_key" ON "Game"("rawgId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Game_thegamesdbId_key" ON "Game"("thegamesdbId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Game_title_idx" ON "Game"("title");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Platform_slug_key" ON "Platform"("slug");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "GamePlatform_gameId_platformId_key" ON "GamePlatform"("gameId", "platformId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "RomFile_checksum_key" ON "RomFile"("checksum");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "RomFile_checksum_idx" ON "RomFile"("checksum");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Tag_name_key" ON "Tag"("name");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "_GameToTag_AB_unique" ON "_GameToTag"("A", "B");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "_GameToTag_B_index" ON "_GameToTag"("B");
|