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 CourseSelectionRoundStatus Status { get; set; } = CourseSelectionRoundStatus.Draft; public string? Notes { get; set; } public ICollection Offerings { 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 DateTime EnrolledAt { get; set; } = DateTime.UtcNow; public DateTime? WithdrawnAt { get; set; } } public enum CourseSelectionRoundStatus { Draft = 1, Open = 2, Closed = 3 } public enum CourseEnrollmentStatus { Enrolled = 1, Withdrawn = 2 }