namespace LehrerApp.Core.Models; /// /// Fallmappe für ein konkretes, laufendes Problem mit einer/einem oder mehreren Schüler*innen /// (z.B. Schuleschwänzen, wiederholte Hausaufgaben-Verweigerung, ein Konflikt) — bündelt Titel, /// Problembeschreibung, Schlagwörter sowie die dazugehörigen -Einträge /// und eingefrorene WebUntis-Klassenbucheinträge an einem Ort, statt sie über datumsgefilterte /// Listen verstreut zu lassen. Bewusst nur Referenzen () statt /// gecachtem Inhalt — die Datenmenge pro Lehrkraft ist klein genug, dass ein Cache nur /// Invalidierungs-Komplexität einführen würde, ohne echten Nutzen (siehe TODO.md, Präzedenzfall /// 5.3.3: eine Plan-ID-Gruppierung für Förderpläne wurde aus demselben Grund verworfen). /// public class Vorgang { public Guid Id { get; set; } = Guid.NewGuid(); public string Title { get; set; } = ""; public string Description { get; set; } = ""; public List StudentIds { get; set; } = []; /// Freie Labels, z.B. "Absentismus", "Hausaufgaben", "Verspätungen", "Konflikte" — /// siehe VorgangTagDisplay.Suggestions im Desktop-Projekt für die Vorschlagsliste. public List Tags { get; set; } = []; public VorgangStatus Status { get; set; } = VorgangStatus.Open; public List DocumentationIds { get; set; } = []; public List ClassRegisterEntries { get; set; } = []; public DateTime CreatedAt { get; set; } = DateTime.UtcNow; public DateTime UpdatedAt { get; set; } = DateTime.UtcNow; public DateTime? ClosedAt { get; set; } public bool IsDeleted { get; set; } public DateTime? DeletedAt { get; set; } } public enum VorgangStatus { Open, Closed } /// /// Eingefrorene Kopie einer WebUntis-Klassenbuchzeile zum Zeitpunkt des Anheftens an einen /// — keine Referenz per ID, da weder UntisForeignClassRegisterEventDto /// noch UntisClassRegisterCacheEntry eine über einen Cache-Refresh hinweg stabile ID haben. /// public class VorgangClassRegisterEntry { public DateOnly Date { get; set; } public string StudentName { get; set; } = ""; public string? Subject { get; set; } public string? TeacherUsername { get; set; } public string? CategoryName { get; set; } public string? CategoryGroup { get; set; } public string? Text { get; set; } public DateTime PinnedAt { get; set; } = DateTime.UtcNow; }