Setup-Wizard
PilotDreischrittiger Einstiegs-Wizard fuer den sellx Hub: DB-Verbindung, Verbindungstest, Aktivierung des sellx-Kontos. Pflicht beim ersten Start und nach jedem Datenbank-Wechsel.
Funktions-Handbuch · Endkunden
Der Setup-Wizard läuft beim ersten Start des Hub und nach jedem Datenbank-Wechsel. Er führt durch drei Schritte, die jeweils validiert werden müssen, bevor der nächste Schritt freigeschaltet wird.
Datei: sellx-hub/src/pages/SetupWizardPage.tsx
Übersicht
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Schritt 1 │────►│ Schritt 2 │────►│ Schritt 3 │
│ DB-Verbin- │ │ Verbin- │ │ Aktivierung │
│ dung │ │ dungstest │ │ sellx-Konto │
└─────────────┘ └─────────────┘ └─────────────┘Schritt 1 — Datenbankverbindung

Registry-Auslese
Der Wizard liest automatisch die JTL-Wawi-Konfiguration aus der Windows-Registry:
HKEY_CURRENT_USER\Software\JTL\WAWI\DatabaseFelder:
| Feld | Quelle | Editierbar |
|---|---|---|
| Server | Server | Ja |
| Instanz | Instance | Ja |
| Datenbank | Database | Ja |
| Port | Port | Ja (Default: 1433) |
| Windows-Authentifizierung | TrustedConnection=1 | Ja (Radio) |
| SQL-Authentifizierung | TrustedConnection=0 | Ja (Radio) |
| Passwort (nur SQL-Auth) | nicht in Registry | Ja |
Wenn die Registry nicht gelesen werden kann (z.B. JTL-Wawi nicht installiert), sind alle Felder leer und müssen manuell ausgefüllt werden.
Implementierungs-Detail: Der Lese-Vorgang erfolgt im Backend über read_jtl_registry (Win32 winreg-Crate in src-tauri/src/main.rs:161).
Schritt 2 — Verbindungstest

Verbindung testen & DB-Rolle erkennen
Klick auf Verbindung testen löst test_connection aus:
Frontend: invoke("test_connection", { connectionString })
│
▼
Tauri: sidecar_post("/setup/test-connection")
│
▼
Sidecar: SQL-Server-Connect → SELECT @@VERSION + SELECT DB_NAME()
│
▼
Response: { success, jtlVersion, tenantName, error? }Erfolgreicher Test:
| Feld | Bedeutung |
|---|---|
| success: true | Verbindung steht |
| jtlVersion | Erkannte Wawi-Version (z.B. 1.9.7.5) |
| tenantName | Name des Mandanten |
Fehlerfall: success: false + error mit Diagnose-Text (z.B. Login failed for user 'sa'.).
Bei Erfolg wird automatisch die DB-Rolle ermittelt (detect_db_role):
| Erkannte Rolle | Verwendung |
|---|---|
| db_datareader | Read-Only — ausreichend für SQL-Report-Plugins |
| db_datawriter | Read-Write — nötig für Automation-Plugins |
| db_owner | Volle Rechte — nur mit explizitem Kunden-Consent |
Schritt 3 — Aktivierung

Aktivierung sellx-Konto
Der Kunde meldet sich mit seinem sellx-Konto an. Falls er noch keins hat, wird er auf die Registrierungs-Seite geleitet.
Ablauf:
- 1. Hub sendet
activate_hub({ hardwareFingerprint })an Central - 2. Central prüft: Konto aktiv? Subscription gültig? Plugin-Slot frei?
- 3. Central antwortet mit signiertem JWT + verschlüsseltem Master-Key-Seed
- 4. Hub speichert beides in
data.db(hub_config-Tabelle)
Hinweis: Der Hub ist nach diesem Schritt lokal aktiviert. Internet ist erst beim nächsten Heartbeat (24h) wieder nötig.
Setup abgeschlossen

Persistenz
Das Setup-Flag wird in zwei Schichten gespeichert:
| Schicht | Speicherort | Zweck |
|---|---|---|
| Frontend (Zustand) | localStorage["hub-store"].state.isSetupComplete | Schnelle Initial-Routing-Entscheidung |
| Backend (SQLite) | data.db.hub_config["setup_complete"]="true" | Verbindungs-String, Lizenz-Token, Master-Key-Seed |
Der Zustand ist nach Setup komplett; ein Reset ist nur durch Löschen beider Speicher möglich.
Bekannte Einschränkungen
| Issue | Workaround |
|---|---|
isSetupComplete lebt nur in localStorage, nicht in SQLite | Akzeptabel für Desktop — Browser-Daten sind stabil pro Maschine |
| Kein Re-Setup-Button in der UI | Workaround: %APPDATA%\sellx-hub\ löschen und App neu starten |