namespace LehrerApp.Core.Models; /// /// Lokal zwischengespeicherte Zeile aus dem WebUntis-Bericht "Fehlzeiten pro Schüler*in" /// (Klassenlehrer-Feature, siehe TODO.md) — 1:1-Abbildung von `UntisClassAbsenceEntryDto` /// (LehrerApp.Desktop), damit Fehlzeiten nicht bei jedem Öffnen der Ansicht neu abgerufen werden /// müssen. Date bewusst als int (yyyyMMdd) wie die DTOs statt DateOnly/ /// DateTime — vermeidet die LiteDB-DateTime-Kind-Tücke (siehe CLAUDE.md) und ist /// direkt für Bereichs-Queries nutzbar. /// public class UntisAbsenceCacheEntry { public Guid Id { get; set; } = Guid.NewGuid(); public string ClassName { get; set; } = ""; public string StudentName { get; set; } = ""; public int? ExternKey { get; set; } public int Date { get; set; } public int AbsentPeriods { get; set; } public int AbsentMinutes { get; set; } public string? TeacherUsernames { get; set; } public string? Subject { get; set; } public string? AbsenceReason { get; set; } public string? Note { get; set; } public int? EntryId { get; set; } public string? HandledOn { get; set; } public bool Counts { get; set; } public string? ExcuseNote { get; set; } public int? PeriodNumber { get; set; } public string? Status { get; set; } public bool CountsAsFullDay { get; set; } } /// Lokal zwischengespeicherte Zeile aus dem "-alle-"-Klassenbuchbericht, gefiltert auf /// Einträge anderer Lehrkräfte (Klassenlehrer-Feature) — 1:1-Abbildung von /// `UntisForeignClassRegisterEventDto` (LehrerApp.Desktop). public class UntisClassRegisterCacheEntry { public Guid Id { get; set; } = Guid.NewGuid(); public string ClassName { get; set; } = ""; public int Date { get; set; } public string? Subject { get; set; } public string StudentName { get; set; } = ""; public string? TeacherUsername { get; set; } public string? CategoryName { get; set; } public string? CategoryGroup { get; set; } public string? Text { get; set; } } public enum UntisCacheKind { Absences, ClassRegister } /// /// Ein Datensatz pro (, ): wann das "heiße" Fenster /// (die letzten Tage, deren Status sich noch ändern kann) zuletzt aufgefrischt wurde, und wie weit /// die "kalte", als endgültig angenommene Historie bereits lückenlos zurückreicht. Getrennt von den /// Cache-Zeilen selbst, weil ein Fenster ohne Treffer (z.B. eine ereignislose Woche) sonst keine /// Zeile hinterließe, aus der sich "zuletzt abgerufen am…" ableiten ließe. /// public class UntisCacheFetchState { public Guid Id { get; set; } = Guid.NewGuid(); public string ClassName { get; set; } = ""; public UntisCacheKind Kind { get; set; } public DateTime? HotWindowFetchedAt { get; set; } public int? ColdCoverageStartDate { get; set; } }