优化排课
This commit is contained in:
@@ -21,6 +21,8 @@ public sealed class DevelopmentSqliteMigrator(
|
||||
private const string CourseCategoriesMigration = "20260724_13_course_categories";
|
||||
private const string SchedulingOptimizationMigration =
|
||||
"20260724_14_scheduling_optimization";
|
||||
private const string TeacherCourseApplicationsMigration =
|
||||
"20260724_15_teacher_course_applications";
|
||||
|
||||
public async Task MigrateAsync(CancellationToken cancellationToken = default)
|
||||
{
|
||||
@@ -121,6 +123,18 @@ public sealed class DevelopmentSqliteMigrator(
|
||||
SchedulingOptimizationMigration,
|
||||
schedulingOptimizationExists ? [] : SchedulingOptimizationStatements,
|
||||
cancellationToken);
|
||||
var teacherCourseApplicationsExist = await db.Database
|
||||
.SqlQueryRaw<int>(
|
||||
"""
|
||||
SELECT COUNT(*) AS "Value"
|
||||
FROM sqlite_master
|
||||
WHERE type = 'table' AND name = 'TeacherCourseApplications'
|
||||
""")
|
||||
.AnyAsync(value => value > 0, cancellationToken);
|
||||
await ApplyMigrationAsync(
|
||||
TeacherCourseApplicationsMigration,
|
||||
teacherCourseApplicationsExist ? [] : TeacherCourseApplicationStatements,
|
||||
cancellationToken);
|
||||
}
|
||||
|
||||
private async Task ApplyMigrationAsync(
|
||||
@@ -953,4 +967,59 @@ public sealed class DevelopmentSqliteMigrator(
|
||||
ON "TeachingTaskAllowedClassrooms" ("ClassroomId");
|
||||
"""
|
||||
];
|
||||
|
||||
private static readonly string[] TeacherCourseApplicationStatements =
|
||||
[
|
||||
"""
|
||||
ALTER TABLE "TeachingTasks" ADD COLUMN "GenerationBatchCode" TEXT NULL;
|
||||
""",
|
||||
"""
|
||||
CREATE TABLE "TeacherCourseApplications" (
|
||||
"Id" TEXT NOT NULL CONSTRAINT "PK_TeacherCourseApplications" PRIMARY KEY,
|
||||
"AcademicTermId" TEXT NOT NULL,
|
||||
"TeacherId" TEXT NOT NULL,
|
||||
"CourseId" TEXT NOT NULL,
|
||||
"Status" INTEGER NOT NULL,
|
||||
"Statement" TEXT NULL,
|
||||
"ReviewComment" TEXT NULL,
|
||||
"SubmittedAt" TEXT NOT NULL,
|
||||
"ReviewedAt" TEXT NULL,
|
||||
"ReviewedByUserId" TEXT NULL,
|
||||
"CreatedAt" TEXT NOT NULL,
|
||||
"UpdatedAt" TEXT NOT NULL,
|
||||
CONSTRAINT "FK_TeacherCourseApplications_AcademicTerms"
|
||||
FOREIGN KEY ("AcademicTermId") REFERENCES "AcademicTerms" ("Id")
|
||||
ON DELETE RESTRICT,
|
||||
CONSTRAINT "FK_TeacherCourseApplications_Teachers"
|
||||
FOREIGN KEY ("TeacherId") REFERENCES "Teachers" ("Id")
|
||||
ON DELETE CASCADE,
|
||||
CONSTRAINT "FK_TeacherCourseApplications_Courses"
|
||||
FOREIGN KEY ("CourseId") REFERENCES "Courses" ("Id")
|
||||
ON DELETE RESTRICT,
|
||||
CONSTRAINT "FK_TeacherCourseApplications_ReviewedBy"
|
||||
FOREIGN KEY ("ReviewedByUserId") REFERENCES "AspNetUsers" ("Id")
|
||||
ON DELETE SET NULL
|
||||
);
|
||||
""",
|
||||
"""
|
||||
CREATE UNIQUE INDEX "IX_TeacherCourseApplications_Term_Teacher_Course"
|
||||
ON "TeacherCourseApplications" ("AcademicTermId", "TeacherId", "CourseId");
|
||||
""",
|
||||
"""
|
||||
CREATE INDEX "IX_TeacherCourseApplications_Status_AcademicTermId"
|
||||
ON "TeacherCourseApplications" ("Status", "AcademicTermId");
|
||||
""",
|
||||
"""
|
||||
CREATE INDEX "IX_TeacherCourseApplications_TeacherId"
|
||||
ON "TeacherCourseApplications" ("TeacherId");
|
||||
""",
|
||||
"""
|
||||
CREATE INDEX "IX_TeacherCourseApplications_CourseId"
|
||||
ON "TeacherCourseApplications" ("CourseId");
|
||||
""",
|
||||
"""
|
||||
CREATE INDEX "IX_TeacherCourseApplications_ReviewedByUserId"
|
||||
ON "TeacherCourseApplications" ("ReviewedByUserId");
|
||||
"""
|
||||
];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user