Initial commit
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
import { PrismaClient } from "@prisma/client";
|
||||
|
||||
export const prisma = new PrismaClient();
|
||||
|
||||
export async function ensureDatabaseSchema() {
|
||||
await prisma.$executeRawUnsafe(`
|
||||
CREATE TABLE IF NOT EXISTS "DayGroup" (
|
||||
"id" TEXT NOT NULL PRIMARY KEY,
|
||||
"title" TEXT NOT NULL,
|
||||
"order" INTEGER NOT NULL DEFAULT 0,
|
||||
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
`);
|
||||
|
||||
await prisma.$executeRawUnsafe(`
|
||||
CREATE TABLE IF NOT EXISTS "Task" (
|
||||
"id" TEXT NOT NULL PRIMARY KEY,
|
||||
"title" TEXT NOT NULL,
|
||||
"descriptionMarkdown" TEXT NOT NULL,
|
||||
"groupId" TEXT NOT NULL,
|
||||
"order" INTEGER NOT NULL DEFAULT 0,
|
||||
"visible" BOOLEAN NOT NULL DEFAULT true,
|
||||
"starterHtml" TEXT NOT NULL DEFAULT '',
|
||||
"starterCss" TEXT NOT NULL DEFAULT '',
|
||||
"starterJs" TEXT NOT NULL DEFAULT '',
|
||||
"referenceHtml" TEXT NOT NULL DEFAULT '',
|
||||
"referenceCss" TEXT NOT NULL DEFAULT '',
|
||||
"referenceJs" TEXT NOT NULL DEFAULT '',
|
||||
"expectedScreenshotPath" TEXT,
|
||||
"visualThreshold" REAL NOT NULL DEFAULT 0.85,
|
||||
"passingScore" REAL NOT NULL DEFAULT 0.8,
|
||||
"checksJson" TEXT NOT NULL DEFAULT '[]',
|
||||
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
CONSTRAINT "Task_groupId_fkey" FOREIGN KEY ("groupId") REFERENCES "DayGroup" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
||||
);
|
||||
`);
|
||||
|
||||
const taskColumns = await prisma.$queryRawUnsafe<Array<{ name: string }>>(`PRAGMA table_info("Task");`);
|
||||
if (!taskColumns.some((column) => column.name === "passingScore")) {
|
||||
await prisma.$executeRawUnsafe(`ALTER TABLE "Task" ADD COLUMN "passingScore" REAL NOT NULL DEFAULT 0.8;`);
|
||||
}
|
||||
|
||||
await prisma.$executeRawUnsafe(`
|
||||
CREATE TABLE IF NOT EXISTS "Submission" (
|
||||
"id" TEXT NOT NULL PRIMARY KEY,
|
||||
"taskId" TEXT NOT NULL,
|
||||
"studentName" TEXT NOT NULL,
|
||||
"studentKey" TEXT NOT NULL,
|
||||
"html" TEXT NOT NULL,
|
||||
"css" TEXT NOT NULL,
|
||||
"js" TEXT NOT NULL,
|
||||
"passed" BOOLEAN NOT NULL,
|
||||
"score" REAL NOT NULL,
|
||||
"resultJson" TEXT NOT NULL,
|
||||
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
CONSTRAINT "Submission_taskId_fkey" FOREIGN KEY ("taskId") REFERENCES "Task" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
||||
);
|
||||
`);
|
||||
|
||||
await prisma.$executeRawUnsafe(`
|
||||
CREATE INDEX IF NOT EXISTS "Submission_taskId_studentKey_idx" ON "Submission" ("taskId", "studentKey");
|
||||
`);
|
||||
}
|
||||
Reference in New Issue
Block a user