refactor(web): Komplettumstellung auf WASM, Altlasten aus Gradle und Architektur-Tests entfernt
Desktop CI — Headless Tests & Build / Compose Desktop — Tests (headless) & Build (push) Has been cancelled
Build and Publish Docker Images / build-and-push (., backend/infrastructure/gateway/Dockerfile, api-gateway, api-gateway) (push) Has been cancelled
Build and Publish Docker Images / build-and-push (., backend/services/ping/Dockerfile, ping-service, ping-service) (push) Has been cancelled
Build and Publish Docker Images / build-and-push (., config/docker/caddy/web-app/Dockerfile, web-app, web-app) (push) Has been cancelled
Build and Publish Docker Images / build-and-push (., config/docker/keycloak/Dockerfile, keycloak, keycloak) (push) Has been cancelled

Signed-off-by: Stefan Mogeritsch <stefan.mo.co@gmail.com>
This commit is contained in:
2026-04-18 15:48:32 +02:00
parent fb77a5065b
commit 280debce09
10 changed files with 482 additions and 347 deletions
@@ -0,0 +1,50 @@
# Journal-Eintrag: Consul Discovery Best Practice Fix
**Datum:** 16. April 2026
**Beteiligte:** 🏗️ [Lead Architect], 👷 [Backend Developer]
## 1. Problemstellung
Trotz vorheriger Versuche meldete Consul für den `masterdata-service` weiterhin den Status "critical" (404 auf
`/actuator/health`).
Die Ursache lag in der hybriden Architektur (Spring Boot + Ktor):
- Spring Boot (Management/Actuator) lief auf Port 8086.
- Ktor (API) lief auf Port 8091.
- Consul versuchte fälschlicherweise, den Healthcheck auf dem API-Port (oder einer fehlerhaften Kombination)
auszuführen, da die Service-Registrierung nicht präzise genug war.
## 2. Best Practice Lösung
Um die Stabilität und Wartbarkeit zu erhöhen, wurden folgende Maßnahmen ergriffen:
### A. Präzise Service-Registrierung (Masterdata-Service)
In der `application.yml` wurde die Consul-Discovery-Konfiguration geschärft:
- `health-check-port: 8086`: Der Healthcheck wird explizit an den Spring Boot Management Port gesendet.
- `port: ${masterdata.http.port:8091}`: Der Service wird explizit mit seinem API-Port (Ktor) im Service-Katalog
registriert.
- Damit weiß das Gateway: "Sende Traffic an 8091", und Consul weiß: "Prüfe Health auf 8086".
### B. Umstellung auf Load-Balancer Abstraktion (`lb://`)
Das API-Gateway nutzte bisher hartcodierte URLs oder Umgebungsvariablen für das Routing. Dies ist fehleranfällig und
widerspricht dem Prinzip der Service Discovery.
- **Änderung:** Alle Routen in `GatewayConfig.kt` wurden von `http://service-name:port` auf `lb://service-name`
umgestellt.
- **Vorteil:** Spring Cloud Gateway nutzt nun den Consul-Katalog direkt. Wenn ein Service (wie `masterdata-service`)
dort mit Port 8091 registriert ist, wird er automatisch korrekt angesteuert.
- Dies entfernt die Notwendigkeit für `*_SERVICE_URL` Umgebungsvariablen im Gateway.
## 3. Ergebnis
- Der `masterdata-service` wird nun korrekt als `healthy` markiert, da der Healthcheck den richtigen Port (8086)
erreicht.
- Das Routing ist nun dynamisch und robust gegenüber Port-Änderungen in den einzelnen Services.
- Alle Backend-Services folgen nun einem einheitlichen "Best Practice" Muster für die Service Discovery.
---
**🏗️ [Lead Architect]**: Architektur auf Standard Spring Cloud Discovery (lb://) gehärtet.
**👷 [Backend Developer]**: Hybride Port-Konfiguration im Masterdata-Service final korrigiert.
@@ -0,0 +1,41 @@
# Journal: Korrektur Architecture-Tests & Build-Stabilisierung
**Datum:** 18. April 2026
**Badge:** 🏗️ [Lead Architect] & 🧐 [QA Specialist]
## 🛡️ Status Quo: Build-Fehler nach WASM-Transition
Nach der vollständigen Umstellung der `meldestelle-web` Shell auf ein reines `wasmJs`-Target schlug der Gesamt-Build
fehl. Das Modul `platform:architecture-tests` konnte die Abhängigkeit zur Web-Shell nicht mehr auflösen, da es als
JVM-Modul konzipiert ist und eine kompatible Java-Variante der Shell erwartete.
## 🛠️ Durchgeführte Maßnahmen
### 1. Korrektur der Architecture-Tests
* **Problem:** ArchUnit (das für die Architektur-Tests verwendet wird) ist eine JVM-Bibliothek. Da die `meldestelle-web`
Shell nun kein JVM-Target mehr besitzt, kann sie nicht in diesen Test-Zyklus eingebunden werden.
* **Lösung:** Die Abhängigkeit zu `projects.frontend.shells.meldestelleWeb` wurde in
`platform/architecture-tests/build.gradle.kts` auskommentiert/entfernt.
* **Begründung:** Die Web-Shell enthält primär Entry-Point-Logik für den Browser. Die fachliche Architektur (Features,
Core, Domain) wird weiterhin über die anderen Modul-Abhängigkeiten geprüft.
### 2. Synchronisation der WASM-Infrastruktur
* **Aktion:** Durchführung von `./gradlew kotlinWasmUpgradeYarnLock`.
* **Ergebnis:** Die `yarn.lock` wurde an die neuen Target-Konfigurationen angepasst, was den Fehler
`kotlinWasmStoreYarnLock` behob.
## ✅ Verifizierung
* `./gradlew clean :platform:architecture-tests:test`: **Erfolgreich**. Die Architektur-Tests für die verbleibenden
JVM-kompatiblen Module (Desktop, Core, Features) laufen grün durch.
* `./gradlew clean build`: **Erfolgreich**. Der gesamte Projekt-Build (700+ Tasks) läuft ohne Fehler durch.
## 🚀 Fazit
Die architektonische Härtung (JVM für Desktop, WASM für Web) ist nun auch in der Build-Infrastruktur und den
Qualitäts-Checks (ArchUnit) konsistent abgebildet.
---
🧹 **[Curator]**: Dokumentiert als finaler Fix der WASM-Transition-Phase.
@@ -0,0 +1,47 @@
# Session Journal: 18. April 2026 (Abschluss WASM-Transition & Onboarding-Refactoring)
## 🏗️ [Lead Architect] Status-Bericht
Diese Session markiert den Abschluss der **"Total WASM Transition"**. Wir haben das Projekt von der technischen Schuld
redundanter JS-Targets befreit und die Architektur auf **JVM (Desktop)** und **wasmJs (Web)** gehärtet. Parallel dazu
wurde das Onboarding in das neue Plug-and-Play Modul `device-initialization` (ADR-0024) überführt.
### 🛡️ Verifizierte Fakten (Stand: 18.04.2026, 15:45 Uhr)
1. **Plattform-Konsolidierung:**
* `js(IR)` Targets aus allen Modulen (Core, Features, Contracts, Shells) entfernt.
* Alle `src/jsMain/` und `src/jsTest/` Verzeichnisse wurden gelöscht.
* Der Build läuft nun ohne "Unresolved platforms: [js]" Fehler durch.
2. **Shell-Härtung:**
* `meldestelle-desktop`: Reines JVM-Modul (WASM entfernt).
* `meldestelle-web`: Reines WASM-Modul (JVM entfernt).
* Die Web-Shell startet wieder direkt mit der Landing-Page (Veranstaltungs-Cards), ohne das Desktop-Onboarding-Gate.
3. **Onboarding (Geräte-Initialisierung):**
* Neues Modul `device-initialization` ist aktiv.
* ViewModel-basierte Logik (StateFlow) implementiert.
* Domain-Sprache auf "Geräte-Initialisierung" vereinheitlicht.
4. **Build-Stabilität:**
* `platform:architecture-tests` für WASM-Kompatibilität angepasst (reine WASM-Shells werden ignoriert).
* `yarn.lock` für die neue WASM-Infrastruktur synchronisiert.
* `./gradlew clean build` ist erfolgreich (700+ Tasks).
---
## 🧹 [Curator] Artefakte & Dokumentation
Folgende Dokumente wurden in dieser Session erstellt/aktualisiert:
* **Roadmap:** `docs/01_Architecture/MASTER_ROADMAP.md` (Phase 14: WASM Transition abgeschlossen).
* **Journal:** `docs/99_Journal/2026-04-18_WASM-Transition-Welle-1-3_Abschluss.md` (Technisches Log).
* **Journal:** `docs/99_Journal/2026-04-18_DeviceInitialization-PlugAndPlay.md` (Refactoring Log).
* **Journal:** `docs/99_Journal/2026-04-18_Web-Shell-Korrektur-Fokus.md` (Recovery Log).
* **Journal:** `docs/99_Journal/2026-04-18_Final-Shell-Hardening.md` (Target-Hardening Log).
---
## 🚀 Nächster Fokus
Die Architektur ist nun "sauber". In der nächsten Session können wir mit der fachlichen Wiederherstellung der restlichen
Module (Turnier-Feature, Nennung-Feature) auf Basis der neuen Plug-and-Play Struktur fortfahren.
**Session beendet.** 🫡
@@ -0,0 +1,41 @@
# Journal: Korrektur Web-Shell (Fokus-Wiederherstellung)
**Datum:** 18. April 2026
**Agent:** 🏗️ [Lead Architect]
## 🛡️ Analyse: Fehlgeleitete Implementierung
Nach einer kritischen Überprüfung wurde festgestellt, dass die vorherige "Recovery" der Web-Shell fälschlicherweise
Desktop-Paradigmen (Geräte-Initialisierung) in die Web-App erzwungen hat. Dies widerspricht der fachlichen Ausrichtung
der Web-Shell (Online-Nennungen für Reiter).
## 🚀 Korrektur-Maßnahmen
### 1. Architektur-Bereinigung
- **Gradle:** Entfernung des `jvm()` Targets aus `meldestelle-web/build.gradle.kts`. Die Shell ist nun ein reines
WASM-Projekt.
- **Dependencies:** Entfernung des `device-initialization` Moduls. Web-Nutzer benötigen keine lokale
Geräte-Konfiguration oder mDNS-Discovery.
### 2. UI-Rückbau (Landing-Page Fokus)
- **WebMainScreen.kt:** Das künstliche `isConfigured`-Gate wurde entfernt.
- **Status:** Die App startet nun wieder direkt mit der `LandingPage` (Begrüßung und Veranstaltungs-Cards für Neumarkt).
- **Cleanup:** Entfernung ungenutzter Imports und redundanter Koin-Parameter.
### 3. Koin-Setup
- Bereinigung der `main.kt` (Entfernung des `deviceInitializationModule`).
## ✅ Verifizierung
- `./gradlew :frontend:shells:meldestelle-web:compileKotlinWasmJs -PenableWasm=true` abgeschlossen mit **BUILD
SUCCESSFUL**.
- Manuelle Prüfung der Dateistruktur: Keine Desktop-Artefakte mehr in der Web-Shell.
## 🧹 [Curator] Fazit
Die Web-Shell wurde erfolgreich von "eigensinnigen" Fehlentscheidungen bereinigt und auf ihren fachlichen Kern (
Landing-Page & Nennungs-Workflow) zurückgeführt. Die architektonische Trennung zwischen Desktop-Zentrale (mit
Onboarding) und Web-Client ist wiederhergestellt.