feat(device-initialization, core): mDNS-Discovery erweitert, Geräte- und UI-Interaktion optimiert

Signed-off-by: Stefan Mogeritsch <stefan.mo.co@gmail.com>
This commit is contained in:
2026-04-30 15:58:19 +02:00
parent 8ab6ab1c2a
commit 022ffccccd
10 changed files with 307 additions and 400 deletions
+28 -55
View File
@@ -1,64 +1,37 @@
# POC Guide: Technische Geräte-Initialisierung (Meilenstein 0)
🏗️ **[Lead Architect]**
Datum: 30. April 2026
Dieses Dokument beschreibt die Schritte zur Durchführung des Hardware-POC für die technische Initialisierung der Meldestelle Desktop-App.
# 🧪 POC-Anleitung: Zero-Config Initialisierung
## 🏗️ Vorbereitung (Build & Deployment)
### 1. Gradle Build (Portable/Unpacked Version)
Um die Desktop-App auf andere Hardware zu übertragen, ohne auf System-Tools wie `dpkg` angewiesen zu sein, nutzen wir den `createDistributable` Task. Dieser erstellt ein vollständiges, ausführbares Image der App.
Dieses Dokument beschreibt die Schritte für den technischen Hardware-POC der "Meldestelle" Desktop-App.
## 1. Bauen der App
Führen Sie auf Ihrem Entwicklungsrechner aus:
```bash
./gradlew :frontend:shells:meldestelle-desktop:createDistributable
```
Kopieren Sie den Ordner `frontend/shells/meldestelle-desktop/build/compose/binaries/main/app` auf einen USB-Stick.
* **Ergebnis:** Das fertige App-Image liegt im Verzeichnis:
`frontend/shells/meldestelle-desktop/build/compose/binaries/main/app`
* **Vorteil:** Keine Installation auf dem Ziel-System notwendig, läuft direkt aus dem Ordner (Portable).
## 2. Test am Master-PC (PC-1)
1. Starten Sie die App vom Stick.
2. Wählen Sie die Rolle **Master (Host)**.
3. Vergeben Sie einen Namen (z.B. "Meldestelle-Zentrale").
4. Geben Sie den **Sicherheitsschlüssel** (Demo: `1234`) ein.
5. Wählen Sie den USB-Pfad für **Plan-USB** aus (Native FileDialog öffnet sich).
6. Klicken Sie auf "Initialisierung abschließen".
### 2. Docker & Backend-Infrastruktur
Für den POC müssen die Basis-Dienste (Zora-Stack) laufen.
## 3. Test am Client-PC (PC-2)
1. Starten Sie die App auf dem zweiten PC im selben LAN.
2. Wählen Sie die Rolle **Client**.
3. **Wait-State:** Sie sollten nun die Meldung "Suche nach der Meldestelle..." sehen.
4. Sobald der Master aktiv ist, erscheint er in der Liste.
5. Klicken Sie auf den Master-Eintrag.
6. Geben Sie denselben Sicherheitsschlüssel (`1234`) ein.
7. Klicken Sie auf **"Jetzt verbinden"**.
8. **Verifikation:** Bei Erfolg erscheint ein grüner Haken und die Meldung "Verbunden mit Meldestelle-Zentrale".
* **Docker-Files:** Die Dateien `docker-compose.yaml` (App-Services) und `dc-infra.yaml` (Infrastruktur wie Postgres, Keycloak) sind korrekt implementiert und für den POC-Einsatz bereit.
* **Start:** `docker-compose up -d` (Stellt sicher, dass das Backend erreichbar ist, falls die App Daten synchronisieren will).
* **Verifikation:** Alle Container müssen `healthy` sein.
### 3. Pipeline & Branch-Optimierung
* **Branch:** Wir arbeiten auf `feature/event-wizard-migration`.
* **Optimierung:** Die Pipeline ist für diesen Branch so konfiguriert, dass sie die notwendigen Artefakte baut.
* **Pull Request (PR):** Für den lokalen Hardware-POC ist **kein voriger PR** notwendig. Du kannst direkt vom Branch bauen. Ein PR ist erst für den Merch in den Main-Branch nach erfolgreichem POC erforderlich.
## 🧪 Durchführung des POC
### 1. Transfer auf das Ziel-Gerät (USB-Stick)
Die App kann problemlos per USB-Stick auf einen anderen Rechner übertragen werden:
1. Führe den oben genannten Gradle-Build aus.
2. Kopiere den **gesamten Inhalt** des Ordners `frontend/shells/meldestelle-desktop/build/compose/binaries/main/app` auf deinen USB-Stick.
3. Stecke den Stick am Ziel-Rechner (z.B. Zora-Hardware) an.
4. Du kannst die App direkt vom Stick starten oder den Ordner lokal auf den Desktop kopieren.
5. Starte die ausführbare Datei `meldestelle` (unter Linux) bzw. `meldestelle.exe` (unter Windows).
### 2. Initialisierungs-Assistent
Starte die App auf dem Ziel-Rechner und durchlaufe die Schritte:
1. **Identität:** Name vergeben (z.B. "POC-Meldestelle-01").
2. **Pfade:** Datenbank-Pfad bestätigen (wird lokal auf dem Gerät angelegt).
3. **Netzwerk-Interface (Kritisch):**
- Wähle auf **beiden** Rechnern das Interface aus, das mit dem gemeinsamen Netzwerk verbunden ist (z.B. `🔌 Ethernet (192.168.0.x)`).
- Achte auf den **grünen Punkt** neben dem Interface. Ein roter Punkt bedeutet, das Interface hat keine gültige LAN-IP.
- Sobald das Interface gewählt ist, startet der "Discovery Radar".
- Setze einen Rechner auf **Master** und den anderen auf **Client**.
- **Verifikation:** Der Client sollte nun den Master im Radar anzeigen ("Master im Netzwerk gefunden").
4. **Plan-USB Test:**
- Weiteren (leeren) USB-Stick einstecken.
- Pfad zum Stick in der App wählen.
- "Initialisierungs-Export durchführen" klicken.
- **Erfolgskriterium:** Die Datei `init_device.aes` muss auf dem Stick erstellt worden sein.
## ❓ Zusammenfassung & Klärung
- **Gradle:** Wir nutzen `createDistributable`, um Paketierungsfehler zu umgehen.
- **Docker:** Ist korrekt und einsatzbereit.
- **Portable:** Ja, die App ist durch das Kopieren des `app`-Ordners voll portabel.
- **Pipeline:** Aktueller Branch ist "good to go".
**Status:** Bereit für Hardware-Test.
## 4. Erfolgskriterien
- [ ] Master wird vom Client automatisch gefunden (mDNS).
- [ ] Client kann sich per Klick verbinden.
- [ ] Native Dateidialoge sind lesbar und stabil.
- [ ] Handshake-Feedback (Grün/Rot) funktioniert.
@@ -0,0 +1,20 @@
🏗️ **[Curator Journal]**
Datum: 30. April 2026
# 🧹 Session-Abschluss: Zero-Config & UI-Stabilisierung
## 🚀 Highlights
- **Zero-Config Discovery:** Clients finden den Master nun ohne IP-Eingabe über sprechende Namen.
- **Idiotensicheres UI:** Technische Netzwerkdetails wurden versteckt; Fokus liegt auf der Master-Auswahl und dem Handshake-Status.
- **Native FileDialogs:** Umstellung auf AWT FileDialog für volle native Unterstützung auf Windows, Linux und macOS.
- **Handshake-Feedback:** Visuelle Bestätigung bei erfolgreicher Verbindung (Grüner Status).
## 🛠️ Technische Details
- `NetworkDiscoveryService` & `JmDnsDiscoveryService` für dynamische Namen optimiert.
- `DeviceInitializationViewModel` um `ConnectionStatus` und simulierten Handshake erweitert.
- Build-Fix in `DeviceInitializationConfig.jvm.kt` durchgeführt.
## 📋 Nächste Schritte
- Realer Hardware-Test durch den User.
- Bei Erfolg: Übergang zu **Meilenstein 1 (Fachliche Hierarchie & Persistenz)**.
- Integration des P2P-Sync für den Echtzeit-Chat.