first commit
This commit is contained in:
@@ -0,0 +1,255 @@
|
||||
-- CreateTable
|
||||
CREATE TABLE "User" (
|
||||
"id" SERIAL NOT NULL,
|
||||
"email" TEXT NOT NULL,
|
||||
"username" TEXT NOT NULL,
|
||||
"password" TEXT NOT NULL,
|
||||
"role" TEXT NOT NULL DEFAULT 'Student',
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "User_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "Subject" (
|
||||
"id" SERIAL NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"abbreviation" TEXT,
|
||||
"color" TEXT,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "Subject_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "Room" (
|
||||
"id" SERIAL NOT NULL,
|
||||
"number" TEXT NOT NULL,
|
||||
"building" TEXT,
|
||||
"capacity" INTEGER,
|
||||
"equipment" TEXT,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "Room_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "TimetableEntry" (
|
||||
"id" SERIAL NOT NULL,
|
||||
"dayOfWeek" INTEGER NOT NULL,
|
||||
"startTime" TEXT NOT NULL,
|
||||
"endTime" TEXT NOT NULL,
|
||||
"subjectId" INTEGER NOT NULL,
|
||||
"teacherId" INTEGER,
|
||||
"roomId" INTEGER,
|
||||
"weekNumber" INTEGER,
|
||||
"year" INTEGER,
|
||||
"isRecurring" BOOLEAN NOT NULL DEFAULT true,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "TimetableEntry_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "Feedback" (
|
||||
"id" SERIAL NOT NULL,
|
||||
"studentId" INTEGER NOT NULL,
|
||||
"teacherId" INTEGER NOT NULL,
|
||||
"lessonId" INTEGER NOT NULL,
|
||||
"lessonDate" TIMESTAMP(3) NOT NULL,
|
||||
"overallRating" INTEGER NOT NULL,
|
||||
"categories" JSONB,
|
||||
"whatWasGood" TEXT,
|
||||
"whatCanImprove" TEXT,
|
||||
"additionalComments" TEXT,
|
||||
"isAnonymous" BOOLEAN NOT NULL DEFAULT false,
|
||||
"allowTeacherResponse" BOOLEAN NOT NULL DEFAULT true,
|
||||
"teacherResponse" TEXT,
|
||||
"teacherRespondedAt" TIMESTAMP(3),
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "Feedback_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "Grade" (
|
||||
"id" SERIAL NOT NULL,
|
||||
"studentId" INTEGER NOT NULL,
|
||||
"timetableEntryId" INTEGER NOT NULL,
|
||||
"weekNumber" INTEGER NOT NULL,
|
||||
"year" INTEGER NOT NULL,
|
||||
"grade" DOUBLE PRECISION NOT NULL,
|
||||
"gradeType" TEXT NOT NULL,
|
||||
"weight" DOUBLE PRECISION DEFAULT 1.0,
|
||||
"teacherId" INTEGER NOT NULL,
|
||||
"title" TEXT,
|
||||
"description" TEXT,
|
||||
"maxPoints" DOUBLE PRECISION,
|
||||
"achievedPoints" DOUBLE PRECISION,
|
||||
"date" TIMESTAMP(3) NOT NULL,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "Grade_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "ChatGroup" (
|
||||
"id" SERIAL NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"description" TEXT,
|
||||
"createdById" INTEGER NOT NULL,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "ChatGroup_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "ChatGroupMember" (
|
||||
"id" SERIAL NOT NULL,
|
||||
"userId" INTEGER NOT NULL,
|
||||
"groupId" INTEGER NOT NULL,
|
||||
"joinedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "ChatGroupMember_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "ChatMessage" (
|
||||
"id" SERIAL NOT NULL,
|
||||
"content" TEXT NOT NULL,
|
||||
"userId" INTEGER NOT NULL,
|
||||
"groupId" INTEGER NOT NULL,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "ChatMessage_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "User_email_key" ON "User"("email");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "User_username_key" ON "User"("username");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "Subject_name_key" ON "Subject"("name");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Subject_name_idx" ON "Subject"("name");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "Room_number_key" ON "Room"("number");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Room_number_idx" ON "Room"("number");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "TimetableEntry_dayOfWeek_idx" ON "TimetableEntry"("dayOfWeek");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "TimetableEntry_weekNumber_year_idx" ON "TimetableEntry"("weekNumber", "year");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "TimetableEntry_subjectId_idx" ON "TimetableEntry"("subjectId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "TimetableEntry_teacherId_idx" ON "TimetableEntry"("teacherId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "TimetableEntry_roomId_idx" ON "TimetableEntry"("roomId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Feedback_studentId_idx" ON "Feedback"("studentId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Feedback_teacherId_idx" ON "Feedback"("teacherId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Feedback_lessonId_idx" ON "Feedback"("lessonId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "Feedback_studentId_lessonId_key" ON "Feedback"("studentId", "lessonId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Grade_studentId_idx" ON "Grade"("studentId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Grade_timetableEntryId_idx" ON "Grade"("timetableEntryId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Grade_teacherId_idx" ON "Grade"("teacherId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Grade_weekNumber_year_idx" ON "Grade"("weekNumber", "year");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "Grade_studentId_timetableEntryId_weekNumber_year_gradeType_key" ON "Grade"("studentId", "timetableEntryId", "weekNumber", "year", "gradeType");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "ChatGroup_createdById_idx" ON "ChatGroup"("createdById");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "ChatGroupMember_userId_idx" ON "ChatGroupMember"("userId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "ChatGroupMember_groupId_idx" ON "ChatGroupMember"("groupId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "ChatGroupMember_userId_groupId_key" ON "ChatGroupMember"("userId", "groupId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "ChatMessage_groupId_idx" ON "ChatMessage"("groupId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "ChatMessage_userId_idx" ON "ChatMessage"("userId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "ChatMessage_createdAt_idx" ON "ChatMessage"("createdAt");
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "TimetableEntry" ADD CONSTRAINT "TimetableEntry_subjectId_fkey" FOREIGN KEY ("subjectId") REFERENCES "Subject"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "TimetableEntry" ADD CONSTRAINT "TimetableEntry_teacherId_fkey" FOREIGN KEY ("teacherId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "TimetableEntry" ADD CONSTRAINT "TimetableEntry_roomId_fkey" FOREIGN KEY ("roomId") REFERENCES "Room"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "Feedback" ADD CONSTRAINT "Feedback_studentId_fkey" FOREIGN KEY ("studentId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "Feedback" ADD CONSTRAINT "Feedback_teacherId_fkey" FOREIGN KEY ("teacherId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "Feedback" ADD CONSTRAINT "Feedback_lessonId_fkey" FOREIGN KEY ("lessonId") REFERENCES "TimetableEntry"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "Grade" ADD CONSTRAINT "Grade_studentId_fkey" FOREIGN KEY ("studentId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "Grade" ADD CONSTRAINT "Grade_timetableEntryId_fkey" FOREIGN KEY ("timetableEntryId") REFERENCES "TimetableEntry"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "Grade" ADD CONSTRAINT "Grade_teacherId_fkey" FOREIGN KEY ("teacherId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "ChatGroup" ADD CONSTRAINT "ChatGroup_createdById_fkey" FOREIGN KEY ("createdById") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "ChatGroupMember" ADD CONSTRAINT "ChatGroupMember_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "ChatGroupMember" ADD CONSTRAINT "ChatGroupMember_groupId_fkey" FOREIGN KEY ("groupId") REFERENCES "ChatGroup"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "ChatMessage" ADD CONSTRAINT "ChatMessage_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "ChatMessage" ADD CONSTRAINT "ChatMessage_groupId_fkey" FOREIGN KEY ("groupId") REFERENCES "ChatGroup"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
Reference in New Issue
Block a user