Implement comprehensive academic workflow updates

This commit is contained in:
biss committed 2026-08-18 11:49:25 +08:00
1 parent 4f031d4b60
commit 868367855d
11 files changed
+8366 -8

No files matched your search

@@ -1,4 +1,5 @@
using Jiaowu.Api.Domain.Common;
using Jiaowu.Api.Domain.Identity;
namespace Jiaowu.Api.Domain.Academic;
@@ -32,6 +33,35 @@ public sealed class WarningRecord : EntityBase
public DateTime? AcknowledgedAt { get; set; }
public string? AcknowledgeComment { get; set; }
public Guid AcademicTermId { get; set; }
public AcademicRiskCase? RiskCase { get; set; }
}
/// <summary>Confidential follow-up work created for an academic warning.</summary>
public sealed class AcademicRiskCase : EntityBase
{
public Guid WarningRecordId { get; set; }
public WarningRecord? WarningRecord { get; set; }
public Guid StudentId { get; set; }
public Student? Student { get; set; }
public Guid AssignedCounselorUserId { get; set; }
public ApplicationUser? AssignedCounselorUser { get; set; }
public AcademicRiskCaseStatus Status { get; set; } = AcademicRiskCaseStatus.PendingFollowUp;
public DateOnly FollowUpDueDate { get; set; }
public DateOnly? ReviewDate { get; set; }
public DateTime? TaskCompletedAt { get; set; }
public List<AcademicRiskCaseEntry> Entries { get; set; } = [];
}
/// <summary>Confidential counseling or support entry. Never exposed to students or unassigned staff.</summary>
public sealed class AcademicRiskCaseEntry : EntityBase
{
public Guid AcademicRiskCaseId { get; set; }
public AcademicRiskCase? AcademicRiskCase { get; set; }
public AcademicRiskEntryType Type { get; set; }
public required string Content { get; set; }
public DateTime OccurredAt { get; set; }
public Guid RecordedByUserId { get; set; }
public ApplicationUser? RecordedByUser { get; set; }
}
public enum WarningType
@@ -49,3 +79,6 @@ public enum WarningStatus
Resolved = 3,
Dismissed = 4
}
public enum AcademicRiskCaseStatus { PendingFollowUp = 1, InProgress = 2, PendingReview = 3, Closed = 4 }
public enum AcademicRiskEntryType { Counseling = 1, SupportMeasure = 2, Review = 3 }