namespace LehrerApp.Core.Models; public class Exam { public Guid Id { get; set; } = Guid.NewGuid(); public Guid GroupId { get; set; } public string Title { get; set; } = ""; public DateOnly Date { get; set; } public int? ExamNumber { get; set; } public List Tasks { get; set; } = []; public List GradingKey { get; set; } = []; public ExamStatus Status { get; set; } = ExamStatus.Planned; public DateOnly? ReturnedAt { get; set; } public Niveau? Niveau { get; set; } public string? Notes { get; set; } public DateOnly? ApprovalGrantedAt { get; set; } public DateOnly? AnnouncedAt { get; set; } /// Verknüpft Parallelklausuren (gleiche Arbeit, mehrere Kurse) für den Kurs-Umschalter /// auf der Klausuren-Hauptseite — Id der "Ursprungs"-Klausur, gesetzt beim Duplizieren /// (siehe ExamDialogViewModel.Save). public Guid? SharedExamGroupId { get; set; } public DateTime CreatedAt { get; set; } = DateTime.UtcNow; public DateTime UpdatedAt { get; set; } = DateTime.UtcNow; } public class ExamTask { public int Nr { get; set; } public string? Title { get; set; } public double MaxPoints { get; set; } public double Weight { get; set; } = 1.0; public List CompetencyCodes { get; set; } = []; } public class GradingKeyEntry { public string Grade { get; set; } = ""; public double MinPercent { get; set; } } public class GradingKeyTemplate { public Guid Id { get; set; } = Guid.NewGuid(); public string Name { get; set; } = ""; public GradingSystem GradingSystem { get; set; } public List Entries { get; set; } = []; public DateTime UpdatedAt { get; set; } = DateTime.UtcNow; } public class ExamResult { public Guid Id { get; set; } = Guid.NewGuid(); public Guid ExamId { get; set; } public Guid StudentId { get; set; } public List Points { get; set; } = []; public double TotalPoints { get; set; } public string? Grade { get; set; } public bool Absent { get; set; } public string? Comment { get; set; } public DateTime UpdatedAt { get; set; } = DateTime.UtcNow; } public enum ExamStatus { Planned, Conducted, Graded, Returned }