Unit/Lesson/ExamTask/ParticipationSession referenzierten Kompetenzen bisher per Freitext-Code, case-insensitiv gegen den Katalog gematcht - fragil bei Umbenennungen und seit der Bildungsplan-Versionierung nicht mehr eindeutig (zwei Versionen können denselben Code vergeben). Neuer Werttyp CompetencyReference (ItemId + Code/Description-Momentaufnahme) löst das: solange die Id noch im Katalog auflösbar ist, zählt die live Fassung (Rename wirkt sofort), sonst bleibt die gespeicherte historische Fassung sichtbar statt spurlos zu verschwinden. Migration (Schema-Version 6) löst bestehende Codes gegen den Katalog auf; die zuvor dreifach duplizierte Kompetenz-Tag-UI ist jetzt in CompetencyTagGroupBuilder konsolidiert. add_lesson_competency/remove_lesson_competency nehmen jetzt itemId statt code und validieren gegen den Katalog (vorher ungeprüft). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
59 lines
2.2 KiB
C#
59 lines
2.2 KiB
C#
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<ExamTask> Tasks { get; set; } = [];
|
|
public List<GradingKeyEntry> 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<CompetencyReference> Competencies { 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<GradingKeyEntry> 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<double> 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 }
|