2.7 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Projekt
Desktop-Fakturierungsanwendung (Einzelplatz) für ein Hochschulprojekt (SE1, Team 1). Java 21, Swing-GUI mit FlatLaf, Maven-Build. Alle Texte (Klassen, Methoden, Variablen, Kommentare, Spezifikationen) sind auf Deutsch.
Build & Run
./mvnw compile # Kompilieren
./mvnw test # Alle Tests (JUnit 5)
./mvnw test -Dtest=KundenVerwaltungTest # Einzelne Testklasse
./mvnw test -Dtest=KundenVerwaltungTest#testMethode # Einzelne Testmethode
./mvnw package # Fat-JAR bauen (maven-shade-plugin)
java -jar target/fakturierung-1.0.0.jar # Anwendung starten
PDF-Spezifikationen bauen
Die *.md-Dateien unter dokumentation/ (z. B. dokumentation/anforderungen/Lastenheft.md, Pflichtenheft_Gruppe{A-D}.md, dokumentation/tests/Modultestplan.md) werden mit pandoc + XeLaTeX zu PDF konvertiert — es gibt kein Build-Skript, der Aufruf erfolgt manuell.
Diagramme
PlantUML-Quelldateien liegen in dokumentation/diagramme/. Rendering via tools/plantuml.jar.
Architektur
Vier fachliche Module, jeweils einer Projektgruppe zugeordnet:
| Paket | Gruppe | Verantwortung |
|---|---|---|
dokumente |
A | Dokumentenzyklus: Angebot → Auftragsbestätigung → Lieferschein → Rechnung, Belegnummern, PDF-Export |
produkte |
B | Produktverwaltung (CRUD, Nummernvergabe, Löschsperre) |
kunden |
C | Kundenverwaltung (CRUD, Nummernvergabe, Löschsperre) |
gui |
D | Swing-Oberfläche (HauptFenster, Panels, Dialoge, Wizard) |
gemeinsam |
— | Querschnitt: EreignisBus, JsonPersistenz, CSV-Hilfe, Exceptions |
Wichtige Muster
- EreignisBus (Observer): Services melden Datenänderungen (
DatenBereich.KUNDEN/PRODUKTE/DOKUMENTE), GUI-Panels abonnieren und aktualisieren sich. Kein manueller Refresh nötig. - Repository-Interfaces (
KundenRepository,ProduktRepository,DokumentRepository) mit JSON-Implementierungen. Persistenz erfolgt atomar viaJsonPersistenz.schreibeAtomar(). - NummernGenerator-Interfaces (
KundennummernGenerator,ProduktnummernGenerator,BelegnummernGenerator) mitEinfacher*-Implementierungen, die den nächsten Wert aus dem Repository-Bestand ableiten. - ReferenzPrüfung:
DokumentReferenzPruefungverhindert Löschung von Kunden/Produkten, die in Dokumenten referenziert werden. - Wiring in
Main.java: Manuelle Dependency Injection — kein Framework.
Persistenz
Alle Daten liegen als JSON-Dateien im Verzeichnis daten/ (kunden.json, produkte.json, dokumente.json). Dieses Verzeichnis ist in .gitignore.