This commit is contained in:
2026-07-27 12:20:29 +08:00 Unverified
parent 727a429abf
commit 33ae991e86
16 changed files with 7117 additions and 8 deletions
@@ -62,6 +62,8 @@ public sealed class DevelopmentSqliteMigrator(
"20260726_33_background_job_outbox";
private const string CourseAdjustmentOccurrencesMigration =
"20260727_34_course_adjustment_occurrences";
private const string AcademicPlanningPrerequisitesMigration =
"20260727_35_academic_planning_prerequisites";
public async Task MigrateAsync(CancellationToken cancellationToken = default)
{
@@ -453,6 +455,19 @@ public sealed class DevelopmentSqliteMigrator(
BackgroundJobOutboxMigration,
backgroundJobOutboxExists ? [] : BackgroundJobOutboxStatements,
cancellationToken);
var coursePrerequisitesExist = await db.Database
.SqlQueryRaw<int>(
"""
SELECT COUNT(*) AS "Value"
FROM sqlite_master
WHERE type = 'table' AND name = 'CoursePrerequisites'
""")
.AnyAsync(value => value > 0, cancellationToken);
await ApplyMigrationAsync(
AcademicPlanningPrerequisitesMigration,
coursePrerequisitesExist ? [] : AcademicPlanningPrerequisiteStatements,
cancellationToken);
}
private async Task ApplyMigrationAsync(
@@ -2090,4 +2105,31 @@ public sealed class DevelopmentSqliteMigrator(
ON "BackgroundJobOutboxMessages" ("State", "CompletedAt");
"""
];
private static readonly string[] AcademicPlanningPrerequisiteStatements =
[
"""
CREATE TABLE "CoursePrerequisites" (
"Id" TEXT NOT NULL CONSTRAINT "PK_CoursePrerequisites" PRIMARY KEY,
"CourseId" TEXT NOT NULL,
"PrerequisiteCourseId" TEXT NOT NULL,
"CreatedAt" TEXT NOT NULL,
"UpdatedAt" TEXT NOT NULL,
CONSTRAINT "FK_CoursePrerequisites_Courses_CourseId"
FOREIGN KEY ("CourseId") REFERENCES "Courses" ("Id")
ON DELETE CASCADE,
CONSTRAINT "FK_CoursePrerequisites_Courses_PrerequisiteCourseId"
FOREIGN KEY ("PrerequisiteCourseId") REFERENCES "Courses" ("Id")
ON DELETE RESTRICT
);
""",
"""
CREATE UNIQUE INDEX "IX_CoursePrerequisites_CourseId_PrerequisiteCourseId"
ON "CoursePrerequisites" ("CourseId", "PrerequisiteCourseId");
""",
"""
CREATE INDEX "IX_CoursePrerequisites_PrerequisiteCourseId"
ON "CoursePrerequisites" ("PrerequisiteCourseId");
"""
];
}