feat(tests): общие тесты с автором, в истории только результаты ученика (для всех ролей)

Made-with: Cursor
This commit is contained in:
Константин Лебединский
2026-04-01 23:09:17 +05:00
parent d8805bd4ed
commit 35f27a6eb7
4 changed files with 79 additions and 19 deletions
@@ -0,0 +1,26 @@
-- Общие тесты в контексте пары: studentId = id назначенного ученика; authorId = кто создал.
-- Результаты (TestResult) привязаны к ученику (studentId).
ALTER TABLE "Test" ADD COLUMN "authorId" INTEGER;
UPDATE "Test" SET "authorId" = "studentId";
UPDATE "Test" AS t
SET "studentId" = ta."studentId"
FROM "TutorAssignment" AS ta
WHERE t."authorId" = ta."tutorId";
ALTER TABLE "Test" ALTER COLUMN "authorId" SET NOT NULL;
ALTER TABLE "Test" ADD CONSTRAINT "Test_authorId_fkey" FOREIGN KEY ("authorId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE "TestResult" ADD COLUMN "studentId" INTEGER;
UPDATE "TestResult" AS tr
SET "studentId" = t."studentId"
FROM "Test" AS t
WHERE tr."testId" = t."id";
ALTER TABLE "TestResult" ALTER COLUMN "studentId" SET NOT NULL;
ALTER TABLE "TestResult" ADD CONSTRAINT "TestResult_studentId_fkey" FOREIGN KEY ("studentId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+10 -3
View File
@@ -26,7 +26,9 @@ model User {
questions Question[]
chatMessages ChatMessage[]
textbooks Textbook[]
tests Test[]
testsInScope Test[] @relation("TestStudentScope")
testsAuthored Test[] @relation("TestAuthor")
testResults TestResult[]
reports Report[]
hallPhotos HallPhoto[]
}
@@ -75,8 +77,11 @@ model Textbook {
model Test {
id Int @id @default(autoincrement())
/// Контекст пары наставник–ученик (id назначенного ученика); общие тесты для обоих
studentId Int
student User @relation(fields: [studentId], references: [id], onDelete: Cascade)
student User @relation("TestStudentScope", fields: [studentId], references: [id], onDelete: Cascade)
authorId Int
author User @relation("TestAuthor", fields: [authorId], references: [id], onDelete: Cascade)
topic String
questions String
createdAt DateTime @default(now())
@@ -86,11 +91,13 @@ model Test {
model TestResult {
id Int @id @default(autoincrement())
testId Int
test Test @relation(fields: [testId], references: [id], onDelete: Cascade)
studentId Int
student User @relation(fields: [studentId], references: [id], onDelete: Cascade)
answers String
score Int
total Int
createdAt DateTime @default(now())
test Test @relation(fields: [testId], references: [id], onDelete: Cascade)
}
model Report {