feat: MCP-Tools für Fach-/Kompetenzverwaltung + Kompetenzzuordnung zu Lessons (Nutzer-Nachtrag)
Neue CompetencyTools.cs: create/update/delete_subject, create/update/delete_competency_domain, add/update/remove_competency_item, get_subjects, get_competency_catalog. delete_subject und delete_competency_domain als weitere Destructive-Ausnahmen neben delete_lesson (kein Papierkorb). Lesson bekommt ein neues Competencies-Feld (analog zu Unit.Competencies) sowie add_lesson_competency/remove_lesson_competency in LessonPlanTools.cs. ICompetencyDomainRepository um GetBySubject() erweitert, um den Katalog eines Fachs ohne bekannte Klassenstufe abzufragen. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -2723,6 +2723,39 @@ folgenden Punkte gehören direkt in `LehrerApp.Desktop`:
|
||||
[McpToolsTests.cs](LehrerApp.Desktop.Tests/McpToolsTests.cs) (belegt den
|
||||
`[CallerMemberName]`-Mechanismus ohne echtes UI).
|
||||
|
||||
- [x] **4.5.33** Fach-/Kompetenzkatalog-Verwaltung + Kompetenzzuordnung zu Einzelstunden über MCP
|
||||
(2026-09-12, Nutzer-Nachtrag): Nutzer möchte einem KI-Agenten die volle Verwaltung der
|
||||
Fächer (`Subject`) und des Kompetenzkatalogs (`CompetencyDomain`/`CompetencyItem`, siehe
|
||||
Kompetenzen-Tab in den Einstellungen, Kapitel 8) überlassen — anlegen, ändern, löschen, "einfach
|
||||
alles was dazugehört" — sowie das Zuordnen von Kompetenzcodes zu einzelnen Stunden.
|
||||
- Neue [CompetencyTools.cs](LehrerApp.Desktop/Services/Mcp/Tools/CompetencyTools.cs):
|
||||
`get_subjects`/`get_competency_catalog` (Read), `create_subject`/`update_subject`/
|
||||
`create_competency_domain`/`update_competency_domain`/`add_competency_item`/
|
||||
`update_competency_item`/`remove_competency_item` (Write, je mit Bestätigung), sowie
|
||||
`delete_subject`/`delete_competency_domain` als **weitere, gezielte Ausnahmen** von der
|
||||
"v1 ohne Lösch-Tools"-Regel neben `delete_lesson` (4.5.31) — beide Repositories löschen
|
||||
endgültig ohne Papierkorb, deshalb `Destructive = true` und Aufnahme in
|
||||
`McpToolScope.AllowedDestructiveWriteTools` statt der normalen Write-Liste.
|
||||
`delete_subject` nutzt die bereits bestehende Verwendungsprüfung in
|
||||
`SubjectRepository.Delete` (schlägt fehl, wenn noch eine Lerngruppe oder ein
|
||||
Kompetenzkatalog das Fach referenziert) — keine neue Validierung nötig.
|
||||
- `ICompetencyDomainRepository` um `GetBySubject(Guid)` erweitert (alle Klassenstufen eines
|
||||
Fachs), da bisher jede Katalog-Abfrage im gesamten Code eine bekannte `gradeLevel` verlangte
|
||||
(`GetBySubjectAndGrade`) — für `get_competency_catalog` ohne Klassenstufen-Filter fehlte
|
||||
diese Möglichkeit. `CompetencyDomainRepository`/`FakeCompetencyDomains` entsprechend ergänzt.
|
||||
- **Kompetenzzuordnung zu Lessons:** `Lesson` bekommt ein neues Feld `Competencies`
|
||||
(`List<string>`, analog zu `Unit.Competencies`) sowie zwei neue Tools in
|
||||
[LessonPlanTools.cs](LehrerApp.Desktop/Services/Mcp/Tools/LessonPlanTools.cs):
|
||||
`add_lesson_competency`/`remove_lesson_competency`. Bewusst granular statt eines
|
||||
"set_lesson_competencies", das die ganze Liste ersetzt — dieselbe Race-Condition-Überlegung
|
||||
wie bei den Verlaufsplan-Phasen (4.5.28). Bewusst auf **Stundenebene**, nicht je Phase — die
|
||||
in TODO.md 4.5.8 beschriebene feinere Zuordnung je Verlaufsplan-Phase bleibt offen und ist
|
||||
von dieser Änderung unabhängig; `Lesson.Competencies` ist ein eigenständiges, gröberes Feld.
|
||||
- `FakeSubjects` (Tests) von No-Op-Stub auf echtes In-Memory-CRUD (inkl. Namens-Dubletten-Prüfung
|
||||
analog zu `SubjectRepository.Save`) umgestellt, da bisher kein Test tatsächlich über MCP
|
||||
schrieb und ein reiner No-Op genügte.
|
||||
- 16 neue Tests in [McpToolsTests.cs](LehrerApp.Desktop.Tests/McpToolsTests.cs) (jetzt 57).
|
||||
|
||||
**Wichtige Abweichung von der ursprünglichen Planung (5.2):** Vor der Umsetzung zeigte sich,
|
||||
dass 5.2 wie ursprünglich beschrieben eine zweite, parallele Fehlzeiten-Erfassung neben dem
|
||||
bereits bestehenden Anwesenheits-Tracking aus Kapitel 3 (`ParticipationEntry.Attendance`,
|
||||
|
||||
Reference in New Issue
Block a user