考试排考
This commit is contained in:
@@ -32,6 +32,8 @@ public sealed class DevelopmentSqliteMigrator(
|
||||
"20260725_18_schedule_publish_jobs";
|
||||
private const string FlexibleGradesMigration =
|
||||
"20260725_19_flexible_grades";
|
||||
private const string ExamSchedulingOptimizationMigration =
|
||||
"20260725_20_exam_scheduling_optimization";
|
||||
|
||||
public async Task MigrateAsync(CancellationToken cancellationToken = default)
|
||||
{
|
||||
@@ -208,6 +210,21 @@ public sealed class DevelopmentSqliteMigrator(
|
||||
AttendanceMigration,
|
||||
attendanceSheetsExist ? [] : AttendanceStatements,
|
||||
cancellationToken);
|
||||
|
||||
var examSchedulingOptimizationExists = await db.Database
|
||||
.SqlQueryRaw<int>(
|
||||
"""
|
||||
SELECT COUNT(*) AS "Value"
|
||||
FROM pragma_table_info('ExamSessions')
|
||||
WHERE name = 'ExamDate'
|
||||
""")
|
||||
.AnyAsync(value => value > 0, cancellationToken);
|
||||
await ApplyMigrationAsync(
|
||||
ExamSchedulingOptimizationMigration,
|
||||
examSchedulingOptimizationExists
|
||||
? []
|
||||
: ExamSchedulingOptimizationStatements,
|
||||
cancellationToken);
|
||||
}
|
||||
|
||||
private async Task ApplyMigrationAsync(
|
||||
@@ -1367,4 +1384,81 @@ public sealed class DevelopmentSqliteMigrator(
|
||||
ON "SchedulePublishJobs" ("RequestedByUserId");
|
||||
"""
|
||||
];
|
||||
|
||||
private static readonly string[] ExamSchedulingOptimizationStatements =
|
||||
[
|
||||
"""
|
||||
ALTER TABLE "ExamSessions" ADD COLUMN "ExamDate" TEXT NOT NULL DEFAULT '2027-01-01';
|
||||
""",
|
||||
"""
|
||||
ALTER TABLE "ExamSessions" ADD COLUMN "StartPeriod" INTEGER NOT NULL DEFAULT 1;
|
||||
""",
|
||||
"""
|
||||
ALTER TABLE "ExamSessions" ADD COLUMN "PeriodCount" INTEGER NOT NULL DEFAULT 2;
|
||||
""",
|
||||
"""
|
||||
ALTER TABLE "ExamSessions" ADD COLUMN "RequiredBuildingId" TEXT NULL;
|
||||
""",
|
||||
"""
|
||||
ALTER TABLE "ExamSessions" ADD COLUMN "RequiredInvigilatorCount" INTEGER NOT NULL DEFAULT 2;
|
||||
""",
|
||||
"""
|
||||
CREATE TABLE "ExamSessions_Temp" (
|
||||
"Id" TEXT NOT NULL CONSTRAINT "PK_ExamSessions" PRIMARY KEY,
|
||||
"ExamPlanId" TEXT NOT NULL,
|
||||
"TeachingTaskId" TEXT NOT NULL,
|
||||
"ClassroomId" TEXT NULL,
|
||||
"ExamDate" TEXT NOT NULL,
|
||||
"StartPeriod" INTEGER NOT NULL,
|
||||
"PeriodCount" INTEGER NOT NULL,
|
||||
"StartsAt" TEXT NOT NULL,
|
||||
"EndsAt" TEXT NOT NULL,
|
||||
"RequiredBuildingId" TEXT NULL,
|
||||
"RequiredInvigilatorCount" INTEGER 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 SET NULL,
|
||||
CONSTRAINT "FK_ExamSessions_Buildings_RequiredBuildingId"
|
||||
FOREIGN KEY ("RequiredBuildingId") REFERENCES "Buildings" ("Id") ON DELETE SET NULL
|
||||
);
|
||||
""",
|
||||
"""
|
||||
INSERT INTO "ExamSessions_Temp"
|
||||
("Id","ExamPlanId","TeachingTaskId","ClassroomId","ExamDate",
|
||||
"StartPeriod","PeriodCount","StartsAt","EndsAt",
|
||||
"RequiredBuildingId","RequiredInvigilatorCount",
|
||||
"Notes","CreatedAt","UpdatedAt")
|
||||
SELECT "Id","ExamPlanId","TeachingTaskId","ClassroomId",
|
||||
'2027-01-01',
|
||||
1,2,
|
||||
"StartsAt","EndsAt",
|
||||
NULL,2,
|
||||
"Notes","CreatedAt","UpdatedAt"
|
||||
FROM "ExamSessions";
|
||||
""",
|
||||
"DROP TABLE \"ExamSessions\";",
|
||||
"ALTER TABLE \"ExamSessions_Temp\" RENAME TO \"ExamSessions\";",
|
||||
"""
|
||||
CREATE INDEX "IX_ExamSessions_ExamPlanId_StartsAt"
|
||||
ON "ExamSessions" ("ExamPlanId", "StartsAt");
|
||||
""",
|
||||
"""
|
||||
CREATE INDEX "IX_ExamSessions_TeachingTaskId"
|
||||
ON "ExamSessions" ("TeachingTaskId");
|
||||
""",
|
||||
"""
|
||||
CREATE INDEX "IX_ExamSessions_ExamPlanId_ExamDate"
|
||||
ON "ExamSessions" ("ExamPlanId", "ExamDate");
|
||||
""",
|
||||
"""
|
||||
CREATE INDEX "IX_ExamSessions_RequiredBuildingId"
|
||||
ON "ExamSessions" ("RequiredBuildingId");
|
||||
"""
|
||||
];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user