Some checks failed
Automated Container Build / build-and-push (push) Failing after 7s
130 lines
4.3 KiB
SQL
130 lines
4.3 KiB
SQL
-- CreateTable
|
|
CREATE TABLE "Class" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"slug" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"sortOrder" INTEGER NOT NULL DEFAULT 0,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Deck" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"classId" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"sortOrder" INTEGER NOT NULL DEFAULT 0,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "Deck_classId_fkey" FOREIGN KEY ("classId") REFERENCES "Class" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Flashcard" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"deckId" TEXT NOT NULL,
|
|
"front" TEXT NOT NULL,
|
|
"back" TEXT NOT NULL,
|
|
"sortOrder" INTEGER NOT NULL DEFAULT 0,
|
|
CONSTRAINT "Flashcard_deckId_fkey" FOREIGN KEY ("deckId") REFERENCES "Deck" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "QuizSet" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"classId" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"sortOrder" INTEGER NOT NULL DEFAULT 0,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "QuizSet_classId_fkey" FOREIGN KEY ("classId") REFERENCES "Class" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Question" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"quizSetId" TEXT NOT NULL,
|
|
"type" TEXT NOT NULL,
|
|
"prompt" TEXT NOT NULL,
|
|
"rationale" TEXT NOT NULL,
|
|
"category" TEXT NOT NULL,
|
|
"sortOrder" INTEGER NOT NULL DEFAULT 0,
|
|
CONSTRAINT "Question_quizSetId_fkey" FOREIGN KEY ("quizSetId") REFERENCES "QuizSet" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "AnswerOption" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"questionId" TEXT NOT NULL,
|
|
"text" TEXT NOT NULL,
|
|
"isCorrect" BOOLEAN NOT NULL DEFAULT false,
|
|
"sortOrder" INTEGER NOT NULL DEFAULT 0,
|
|
CONSTRAINT "AnswerOption_questionId_fkey" FOREIGN KEY ("questionId") REFERENCES "Question" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "StudyProgress" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"contentType" TEXT NOT NULL,
|
|
"deckId" TEXT,
|
|
"quizSetId" TEXT,
|
|
"mode" TEXT NOT NULL,
|
|
"currentIndex" INTEGER NOT NULL DEFAULT 0,
|
|
"orderJson" TEXT NOT NULL,
|
|
"answersJson" TEXT,
|
|
"cardResultsJson" TEXT,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "StudyProgress_deckId_fkey" FOREIGN KEY ("deckId") REFERENCES "Deck" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
|
CONSTRAINT "StudyProgress_quizSetId_fkey" FOREIGN KEY ("quizSetId") REFERENCES "QuizSet" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "QuizAttempt" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"quizSetId" TEXT NOT NULL,
|
|
"score" REAL NOT NULL,
|
|
"maxScore" INTEGER NOT NULL,
|
|
"answersJson" TEXT NOT NULL,
|
|
"isPartialRetake" BOOLEAN NOT NULL DEFAULT false,
|
|
"completedAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "QuizAttempt_quizSetId_fkey" FOREIGN KEY ("quizSetId") REFERENCES "QuizSet" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "ShareLink" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"targetType" TEXT NOT NULL,
|
|
"deckId" TEXT,
|
|
"quizSetId" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "ShareLink_deckId_fkey" FOREIGN KEY ("deckId") REFERENCES "Deck" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
|
CONSTRAINT "ShareLink_quizSetId_fkey" FOREIGN KEY ("quizSetId") REFERENCES "QuizSet" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "AuthSecurity" (
|
|
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT DEFAULT 1,
|
|
"failedAttempts" INTEGER NOT NULL DEFAULT 0,
|
|
"lockedUntil" DATETIME,
|
|
"lastAttemptAt" DATETIME
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Setting" (
|
|
"key" TEXT NOT NULL PRIMARY KEY,
|
|
"value" TEXT NOT NULL
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Class_slug_key" ON "Class"("slug");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "StudyProgress_deckId_mode_key" ON "StudyProgress"("deckId", "mode");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "StudyProgress_quizSetId_mode_key" ON "StudyProgress"("quizSetId", "mode");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "ShareLink_deckId_key" ON "ShareLink"("deckId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "ShareLink_quizSetId_key" ON "ShareLink"("quizSetId");
|