chore: update Prisma and dependencies, add initial migration and tests
- 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.
This commit is contained in:
133
backend/prisma/migrations/20260208102247_init/migration.sql
Normal file
133
backend/prisma/migrations/20260208102247_init/migration.sql
Normal file
@@ -0,0 +1,133 @@
|
||||
-- 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");
|
||||
Reference in New Issue
Block a user