已继续完成“学籍异动”后端基础闭环:
学生可申请休学、复学或退学。 自动根据当前状态推导目标学籍状态。 同一学生不能同时提交多项在审申请。 强制执行辅导员 → 学院 → 校级三级审核。 驳回不会修改学生档案。 只有校级最终批准才更新学籍状态。 数据范围分别限制到本人、所带班级、所属学院或全校。 SQLite 增量升级和 MySQL 迁移已生成。 当前 28 项测试继续全部通过。
This commit is contained in:
@@ -14,6 +14,7 @@ public sealed class DevelopmentSqliteMigrator(
|
||||
private const string CourseSelectionMigration = "20260724_06_course_selection";
|
||||
private const string GradesMigration = "20260724_07_grades";
|
||||
private const string ExamsMigration = "20260724_08_exams";
|
||||
private const string StudentStatusChangesMigration = "20260724_09_student_status_changes";
|
||||
|
||||
public async Task MigrateAsync(CancellationToken cancellationToken = default)
|
||||
{
|
||||
@@ -70,6 +71,10 @@ public sealed class DevelopmentSqliteMigrator(
|
||||
GradesStatements,
|
||||
cancellationToken);
|
||||
await ApplyMigrationAsync(ExamsMigration, ExamsStatements, cancellationToken);
|
||||
await ApplyMigrationAsync(
|
||||
StudentStatusChangesMigration,
|
||||
StudentStatusChangesStatements,
|
||||
cancellationToken);
|
||||
}
|
||||
|
||||
private async Task ApplyMigrationAsync(
|
||||
@@ -614,4 +619,22 @@ public sealed class DevelopmentSqliteMigrator(
|
||||
""",
|
||||
"""CREATE INDEX IF NOT EXISTS "IX_ExamSessionInvigilators_TeacherId" ON "ExamSessionInvigilators" ("TeacherId");"""
|
||||
];
|
||||
|
||||
private static readonly string[] StudentStatusChangesStatements =
|
||||
[
|
||||
"""
|
||||
CREATE TABLE IF NOT EXISTS "StudentStatusChanges" (
|
||||
"Id" TEXT NOT NULL CONSTRAINT "PK_StudentStatusChanges" PRIMARY KEY,
|
||||
"StudentId" TEXT NOT NULL, "Type" INTEGER NOT NULL,
|
||||
"OriginalStatus" INTEGER NOT NULL, "TargetStatus" INTEGER NOT NULL,
|
||||
"Reason" TEXT NOT NULL, "State" INTEGER NOT NULL,
|
||||
"ReviewComment" TEXT NULL, "SubmittedAt" TEXT NOT NULL,
|
||||
"ReviewedAt" TEXT NULL, "ApprovedAt" TEXT NULL,
|
||||
"CreatedAt" TEXT NOT NULL, "UpdatedAt" TEXT NOT NULL,
|
||||
CONSTRAINT "FK_StudentStatusChanges_Students_StudentId"
|
||||
FOREIGN KEY ("StudentId") REFERENCES "Students" ("Id") ON DELETE RESTRICT
|
||||
);
|
||||
""",
|
||||
"""CREATE INDEX IF NOT EXISTS "IX_StudentStatusChanges_StudentId_State" ON "StudentStatusChanges" ("StudentId", "State");"""
|
||||
];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user