using Jiaowu.Api.Domain.Common; namespace Jiaowu.Api.Domain.Academic; public sealed class CourseSelectionRound : EntityBase { public Guid AcademicTermId { get; set; } public AcademicTerm? AcademicTerm { get; set; } public required string Name { get; set; } public DateTime StartsAt { get; set; } public DateTime EndsAt { get; set; } public DateTime WithdrawalEndsAt { get; set; } public decimal MaxCredits { get; set; } = 30; public int? MaxCourseCount { get; set; } public CourseSelectionRoundStatus Status { get; set; } = CourseSelectionRoundStatus.Draft; public string? Notes { get; set; } public ICollection EligibleGrades { get; set; } = []; public ICollection Offerings { get; set; } = []; } public sealed class CourseSelectionRoundGrade : EntityBase { public Guid CourseSelectionRoundId { get; set; } public CourseSelectionRound? CourseSelectionRound { get; set; } public int Grade { get; set; } } public sealed class CourseSelectionOffering : EntityBase { public Guid CourseSelectionRoundId { get; set; } public CourseSelectionRound? CourseSelectionRound { get; set; } public Guid TeachingTaskId { get; set; } public TeachingTask? TeachingTask { get; set; } public int Capacity { get; set; } public bool IsOpenToAll { get; set; } public string? Notes { get; set; } public ICollection Enrollments { get; set; } = []; } public sealed class CourseEnrollment : EntityBase { public Guid CourseSelectionOfferingId { get; set; } public CourseSelectionOffering? CourseSelectionOffering { get; set; } public Guid StudentId { get; set; } public Student? Student { get; set; } public CourseEnrollmentStatus Status { get; set; } = CourseEnrollmentStatus.Enrolled; public EnrollmentType EnrollmentType { get; set; } = EnrollmentType.Normal; public DateTime EnrolledAt { get; set; } = DateTime.UtcNow; public DateTime? WaitlistedAt { get; set; } public DateTime? WithdrawnAt { get; set; } } public enum CourseSelectionRoundStatus { Draft = 1, Open = 2, Closed = 3 } public enum CourseEnrollmentStatus { Enrolled = 1, Withdrawn = 2, Waitlisted = 3, Cancelled = 4, Expired = 5 } public enum EnrollmentType { Normal = 1, Retake = 2 }