51 lines
2.6 KiB
Markdown
51 lines
2.6 KiB
Markdown
# 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
|
|
|
|
```bash
|
|
./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 im Wurzelverzeichnis (Lastenheft, Pflichtenheft_Gruppe{A-D}, Modultestplan) werden mit pandoc + XeLaTeX zu PDF konvertiert — es gibt kein Build-Skript, der Aufruf erfolgt manuell.
|
|
|
|
## Diagramme
|
|
|
|
PlantUML-Quelldateien liegen in `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 via `JsonPersistenz.schreibeAtomar()`.
|
|
- **NummernGenerator-Interfaces** (`KundennummernGenerator`, `ProduktnummernGenerator`, `BelegnummernGenerator`) mit `Einfacher*`-Implementierungen, die den nächsten Wert aus dem Repository-Bestand ableiten.
|
|
- **ReferenzPrüfung**: `DokumentReferenzPruefung` verhindert 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`.
|