已完成“考试安排与考场管理”模块:
考试计划草稿、场次配置与正式发布。 教学班、考试时间、考场、监考教师关联。 自动校验考场容量。 阻止考场、监考教师和学生考试时间冲突。 管理员查看考生名单。 教师查看个人监考安排。 学生查看已发布考试日程。 SQLite 增量升级和 MySQL 正式迁移。
This commit is contained in:
@@ -13,6 +13,7 @@ public sealed class DevelopmentSqliteMigrator(
|
||||
private const string ClassCounselorMigration = "20260724_05_class_counselor";
|
||||
private const string CourseSelectionMigration = "20260724_06_course_selection";
|
||||
private const string GradesMigration = "20260724_07_grades";
|
||||
private const string ExamsMigration = "20260724_08_exams";
|
||||
|
||||
public async Task MigrateAsync(CancellationToken cancellationToken = default)
|
||||
{
|
||||
@@ -68,6 +69,7 @@ public sealed class DevelopmentSqliteMigrator(
|
||||
GradesMigration,
|
||||
GradesStatements,
|
||||
cancellationToken);
|
||||
await ApplyMigrationAsync(ExamsMigration, ExamsStatements, cancellationToken);
|
||||
}
|
||||
|
||||
private async Task ApplyMigrationAsync(
|
||||
@@ -569,4 +571,47 @@ public sealed class DevelopmentSqliteMigrator(
|
||||
ON "GradeRecords" ("StudentId", "TotalScore");
|
||||
"""
|
||||
];
|
||||
|
||||
private static readonly string[] ExamsStatements =
|
||||
[
|
||||
"""
|
||||
CREATE TABLE IF NOT EXISTS "ExamPlans" (
|
||||
"Id" TEXT NOT NULL CONSTRAINT "PK_ExamPlans" PRIMARY KEY,
|
||||
"AcademicTermId" TEXT NOT NULL, "Name" TEXT NOT NULL,
|
||||
"Status" INTEGER NOT NULL, "Notes" TEXT NULL, "PublishedAt" TEXT NULL,
|
||||
"CreatedAt" TEXT NOT NULL, "UpdatedAt" TEXT NOT NULL,
|
||||
CONSTRAINT "FK_ExamPlans_AcademicTerms_AcademicTermId"
|
||||
FOREIGN KEY ("AcademicTermId") REFERENCES "AcademicTerms" ("Id") ON DELETE RESTRICT
|
||||
);
|
||||
""",
|
||||
"""CREATE INDEX IF NOT EXISTS "IX_ExamPlans_AcademicTermId_Status" ON "ExamPlans" ("AcademicTermId", "Status");""",
|
||||
"""
|
||||
CREATE TABLE IF NOT EXISTS "ExamSessions" (
|
||||
"Id" TEXT NOT NULL CONSTRAINT "PK_ExamSessions" PRIMARY KEY,
|
||||
"ExamPlanId" TEXT NOT NULL, "TeachingTaskId" TEXT NOT NULL,
|
||||
"ClassroomId" TEXT NOT NULL, "StartsAt" TEXT NOT NULL, "EndsAt" TEXT NOT NULL,
|
||||
"Notes" TEXT NULL, "CreatedAt" TEXT NOT NULL, "UpdatedAt" TEXT NOT NULL,
|
||||
CONSTRAINT "FK_ExamSessions_ExamPlans_ExamPlanId" FOREIGN KEY ("ExamPlanId")
|
||||
REFERENCES "ExamPlans" ("Id") ON DELETE CASCADE,
|
||||
CONSTRAINT "FK_ExamSessions_TeachingTasks_TeachingTaskId" FOREIGN KEY ("TeachingTaskId")
|
||||
REFERENCES "TeachingTasks" ("Id") ON DELETE RESTRICT,
|
||||
CONSTRAINT "FK_ExamSessions_Classrooms_ClassroomId" FOREIGN KEY ("ClassroomId")
|
||||
REFERENCES "Classrooms" ("Id") ON DELETE RESTRICT
|
||||
);
|
||||
""",
|
||||
"""CREATE INDEX IF NOT EXISTS "IX_ExamSessions_ExamPlanId_StartsAt" ON "ExamSessions" ("ExamPlanId", "StartsAt");""",
|
||||
"""CREATE INDEX IF NOT EXISTS "IX_ExamSessions_TeachingTaskId" ON "ExamSessions" ("TeachingTaskId");""",
|
||||
"""CREATE INDEX IF NOT EXISTS "IX_ExamSessions_ClassroomId" ON "ExamSessions" ("ClassroomId");""",
|
||||
"""
|
||||
CREATE TABLE IF NOT EXISTS "ExamSessionInvigilators" (
|
||||
"ExamSessionId" TEXT NOT NULL, "TeacherId" TEXT NOT NULL,
|
||||
CONSTRAINT "PK_ExamSessionInvigilators" PRIMARY KEY ("ExamSessionId", "TeacherId"),
|
||||
CONSTRAINT "FK_ExamSessionInvigilators_ExamSessions_ExamSessionId"
|
||||
FOREIGN KEY ("ExamSessionId") REFERENCES "ExamSessions" ("Id") ON DELETE CASCADE,
|
||||
CONSTRAINT "FK_ExamSessionInvigilators_Teachers_TeacherId"
|
||||
FOREIGN KEY ("TeacherId") REFERENCES "Teachers" ("Id") ON DELETE RESTRICT
|
||||
);
|
||||
""",
|
||||
"""CREATE INDEX IF NOT EXISTS "IX_ExamSessionInvigilators_TeacherId" ON "ExamSessionInvigilators" ("TeacherId");"""
|
||||
];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user