SE1_Team_1/CLAUDE.md

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`.