SE1_Team_1/CLAUDE.md

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