chore: entferne AuthApiClient, AuthTokenManager und DeviceInitializationConfig.jvm, da diese nicht mehr benötigt werden
This commit is contained in:
parent
dc66dfb537
commit
8a3ef98c44
|
|
@ -1,5 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="GradleMigrationSettings" migrationVersion="1" />
|
||||
<component name="GradleSettings">
|
||||
<option name="linkedExternalProjectsSettings">
|
||||
<GradleProjectSettings>
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ExternalStorageConfigurationManager" enabled="true" />
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_25" project-jdk-name="openjdk-25" project-jdk-type="JavaSDK" />
|
||||
|
|
|
|||
37
docs/temp/GEMMA-4_2026-04-16.md
Normal file
37
docs/temp/GEMMA-4_2026-04-16.md
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
👷 **[Frontend Expert]**
|
||||
|
||||
**Verstanden. Ich nehme die Herausforderung an.**
|
||||
|
||||
Ich werde diesen Scan als **"Audit-Phase"** behandeln. Mein Ziel ist es, nicht nur ein Chaos-Dokument zu erstellen, sondern eine **"Architektur-Anleitung"**, die als Single Source of Truth für die zukünftige Entwicklung dient.
|
||||
|
||||
Hier ist mein Schlachtplan für die nächsten Schritte:
|
||||
|
||||
### 1. Der Scan (Aktueller Schritt)
|
||||
Ich führe den Scan durch, um die Struktur jedes einzelnen Moduls zu erfassen. Ich werde die Pfade so mappen, dass ich genau sehe:
|
||||
* **Modul-Name** (z.B. `features:login`)
|
||||
* **Vorhandene Source-Sets** (`commonMain`, `jvmMain`, `wasmJsMain`)
|
||||
* **Status** (Ist es ein "Standard-Modul" oder ein "Sonderfall"?)
|
||||
|
||||
### 2. Die Analyse (Die "Chaos-Matrix")
|
||||
Aus den Rohdaten erstelle ich die **Chaos-Matrix**. Diese wird folgende Fragen beantworten:
|
||||
* Welche Module folgen bereits einem Muster?
|
||||
* Wo sind die "Inseln der Wildnis" (Module ohne jegliche Struktur)?
|
||||
* Welche Abhängigkeiten (Gradle-Module) sind von der Struktur-Anpassung betroffen?
|
||||
|
||||
### 3. Die Architektur-Anleitung (Das Endprodukt)
|
||||
Dies ist das Dokument, das Sie am Ende erhalten. Es wird kein bloßes Problem-Dokument sein, sondern ein **Blueprint**. Es wird enthalten:
|
||||
* **Die "Golden Rule" der Modul-Struktur:** Die definierte Standard-Struktur für jedes neue Modul.
|
||||
* **Die "Migration-Matrix":** Eine Liste aller existierenden Module mit der Anweisung: *"Modul X muss von Struktur A nach Struktur B migriert werden"*.
|
||||
* **Das "Pattern-Library" Dokument:**
|
||||
* Wie ein `feature`-Modul aufgebaut sein muss (mit `commonMain` und `jvmMain`).
|
||||
* Wie ein `library`-Modul aufgebaut sein muss (rein `commonMain`).
|
||||
* Wie ein `platform`-Modul aufgebaut sein muss (z.B. für Android oder Desktop-spezifische Erweiterungen).
|
||||
* **Die "Definition of Done" (DoD) für neue Module:** Eine Checkliste, die ein Entwickler abhaken muss, bevor ein Modul als "fertig" gilt.
|
||||
|
||||
---
|
||||
|
||||
**Ich starte jetzt den Scan.**
|
||||
|
||||
*(Ich werde nach Abschluss des Scans und der Erstellung der Matrix sofort mit der Analyse beginnen.)*
|
||||
|
||||
`[Status: Running Structural Scan...]
|
||||
55
docs/temp/MODULE_ARCH_BLUEPRINT.md
Normal file
55
docs/temp/MODULE_ARCH_BLUEPRINT.md
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
# 🏗️ Module Architecture Blueprint
|
||||
|
||||
Dieses Dokument definiert die Architektur-Standards für das Projekt, um eine konsistente, skalierbare und wartbare Modulstruktur zu gewährleisten.
|
||||
|
||||
## 🎯 Kernziel
|
||||
Etablierung einer klaren Trennung zwischen Geschäftslogik (Common) und Plattform-spezifischer Darstellung (JVM/Web), um die Wiederverwendbarkeit und Testbarkeit zu maximieren.
|
||||
|
||||
---
|
||||
|
||||
## 📂 Modultypen (Module Archetypes)
|
||||
|
||||
Jedes Modul im Projekt muss einer der folgenden drei Kategorien zugeordnet werden:
|
||||
|
||||
### 1. Core Modules (Type: `CORE`)
|
||||
* **Zweck:** Rein geschäftliche Logik, Domain-Modelle, Use-Cases.
|
||||
* **Struktur:** Ausschließlich `commonMain`. Keine Abhängigkeiten zu Plattform-spezifischen APIs.
|
||||
* **Regel:** Darf keine Kenntnis über die UI oder Plattform-spezifische Frameworks haben.
|
||||
|
||||
### 2. Feature Modules (Type: `FEATURE`)
|
||||
* **Zweck:** Implementierung einer spezifischen Benutzerfunktion (z.B. "Login", "Registration").
|
||||
* **Struktur:** `commonMain` (Logik) + `jvmMain` / `jsMain` (UI/Integration).
|
||||
* **Regel:** Nutzt `CORE`-Module. Darf nur über definierte Schnittstellen mit anderen `FEATURE`-Modulen kommunizieren.
|
||||
|
||||
### 3. Infrastructure/Adapter Modules (Type: `ADAPTER`)
|
||||
* **Zweck:** Implementierung von Schnittstellen (z.B. API-Clients, Datenbank-Treiber, Bluetooth-Adapter).
|
||||
* **Struktur:** Implementiert `expect`-Deklarationen aus `CORE` oder `FEATURE` mittels `actual`-Implementierungen.
|
||||
* **Regel:** Versteckt die Komplexität der Plattform hinter einer saubbar definierten API.
|
||||
|
||||
---
|
||||
|
||||
## 🛠️ Strukturregeln (The Golden Rules)
|
||||
|
||||
### 📏 Rule 1: Dependency Direction
|
||||
Abhängigkeiten dürfen **nur nach unten** fließen:
|
||||
`FEATURE` $\rightarrow$ `CORE` $\rightarrow$ `ADAPTER` (Interfaces)
|
||||
`FEATURE` $\rightarrow$ `ADAPTER` (Implementations)
|
||||
|
||||
**Verboten:** Ein `CORE`-Modul darf niemals ein `FEATURE`-Modul referenzieren.
|
||||
|
||||
### 🔄 Rule 2: The Expect/Actual Pattern
|
||||
Um Plattform-spezifischen Code in `commonMain` nutzbar zu machen, ist das `expect/actual`-Pattern zwingend:
|
||||
1. **Define** `expect class/function` in `commonMain`.
|
||||
2. **Implement** `actual class/function` in `jvmMain` (Desktop) und `jsMain` (Web).
|
||||
|
||||
### 📦 Rule 3: Encapsulation
|
||||
Module müssen ihre internen Implementierungen verbergen. Nur Klassen und Funktionen, die explizit für die Nutzung durch andere Module markiert sind (z.B. via `internal` Modifier), dürfen exportiert werden.
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Deployment & Build
|
||||
* **Build System:** Gradle.
|
||||
* **Multiplatform:** Kotlin Multiplatform (KMP).
|
||||
* **CI/CD Check:** Bei jedem Pull-Request wird die Einhardung der Abhängigkeitsrichtung durch ein Dependency-Analysis-Plugin geprüft.
|
||||
|
||||
---
|
||||
49
docs/temp/MODULE_STRUCTURE_BLUEPRINT.md
Normal file
49
docs/temp/MODULE_STRUCTURE_BLUEPRINT.md
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
# 🏗️ Modul-Struktur-Blueprint (Standard-Topologie)
|
||||
|
||||
**Status:** ARCHITECTURAL STANDARD
|
||||
**Ziel:** Elimination von strukturellen Inkonsistenheiten (Kraut & Rüben)
|
||||
**Prinzip:** Plug-and-Play Multiplatform-Komponenten
|
||||
|
||||
## 1. Die Modul-Klassifizierung (The Taxonomy)
|
||||
|
||||
Jedes Modul im Projekt **muss** einer der folgenden drei Klassen zugeordnet werden. Es gibt keine "unidentifizierten" Module mehr.
|
||||
|
||||
### 🟢 Klasse A: `CORE_LIBRARY`
|
||||
* **Zweck:** Reine Geschäftslogik, Datenmodelle, Hilfsfunktionen (Utils).
|
||||
* **Anforderung:** Besteht **ausschließlich** aus `src/commonMain`.
|
||||
* **Einsatz:** Keine Plattform-spezifischen Abhängigkeiten erlaubt.
|
||||
* **Beispiel:** `:core:database`, `:core:network-models`.
|
||||
|
||||
### 🔵 Klasse B: `UI_COMPONENT` (Der Standard)
|
||||
* **Zweck:** Visuelle Features, Screens, interaktive Elemente.
|
||||
* **Anforderung:** **Zwingende** Struktur:
|
||||
* `src/commonMain` (Logik & Interface)
|
||||
* `src/jvmMain` (Desktop-spezifische UI-Erweiterungen/Render-Strategie)
|
||||
* `src/wasmJsMain` (Web-spezifische Render-Strategie)
|
||||
* **Einsatz:** Das Standard-Modul für alle "Plug-and-Play" Features.
|
||||
* **Beispiel:** `:features:auth`, `:features:import`, `:features:settings`.
|
||||
|
||||
### 🟡 Klasse C: `PLATFORM_ADAPTER`
|
||||
* **Zweck:** Tiefe Integration von Hardware-APIs oder Plattform-spezifischem Code.
|
||||
* **Anforderung:** Enthält hochgradig spezialisierten Code für eine einzige Plattform.
|
||||
* **Beispiel:** `:platform:android-biometrics`.
|
||||
|
||||
---
|
||||
|
||||
## 2. Design-Regeln (The Golden Rules)
|
||||
|
||||
1. **The "Expect/Actual" Rule:** `expect`-Deklarationen gehören immer in den `commonMain`-Source-Set. `actual`-Implementierungen werden strikt in den jeweiligen Plattform-Source-Sets (`jvmMain`, `wasmJsMain`, etc.) platziert.
|
||||
2. **The Dependency Rule:** Ein `commonMain`-Modul darf niemals eine Abhängigkeit zu einem Modul haben, das nur in `jvmMain` existiert. Abhängigkeiten müssen immer "nach unten" (zu `common`) oder "horizontal" (zu anderen `common`-Modulen) verlaufen.
|
||||
3. **The Consistency Rule:** Ein Modul darf niemals "unvollständig" sein. Wenn ein Modul ein `jvmMain` hat, muss es auch ein `wasmJsMain` (oder zumindest die Infrastruktur dafür) vorbereitet haben, um die Plugin-Architektur nicht zu brechen.
|
||||
|
||||
---
|
||||
|
||||
## 3. Implementierungs-Checkliste (Migration Guide)
|
||||
|
||||
Wenn du ein neues Modul erstellst oder ein altes migrierst:
|
||||
|
||||
- [ ] Identifiziere die Klasse (A, B oder C).
|
||||
- [ ] Erstelle die Verzeichnisstruktur gemäß der Klasse.
|
||||
- [ ] Überprüfe die `build.gradle.kts` auf korrekte Source-Set-Konfiguration.
|
||||
- [ ] Sicherstellen, dass alle `expect`-Funktionen durch `actual`-Implementierungen in allen Ziel-Plattformen abgedeckt sind.
|
||||
- [ ] Teste die Kompilierung für alle Ziel-Plattformen (`./gradlew check`).
|
||||
|
|
@ -1,4 +1,6 @@
|
|||
package at.mocode.frontend.core.auth.data
|
||||
package at.mocode.frontend.core.auth.data.local
|
||||
|
||||
import at.mocode.frontend.core.auth.data.remote.AuthApiClient
|
||||
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
|
|
@ -117,7 +119,7 @@ class AuthTokenManager {
|
|||
}
|
||||
|
||||
/**
|
||||
* Get current JWT token
|
||||
* Get the current JWT token
|
||||
*/
|
||||
fun getToken(): String? = currentToken
|
||||
|
||||
|
|
@ -147,7 +149,7 @@ class AuthTokenManager {
|
|||
}
|
||||
|
||||
/**
|
||||
* Get user ID from token
|
||||
* Get user ID from a token
|
||||
*/
|
||||
fun getUserId(): String? = tokenPayload?.sub
|
||||
|
||||
|
|
@ -1,4 +1,6 @@
|
|||
package at.mocode.frontend.core.auth.data
|
||||
package at.mocode.frontend.core.auth.data.remote
|
||||
|
||||
import at.mocode.frontend.core.auth.utils.PkceHelper
|
||||
|
||||
import at.mocode.frontend.core.domain.AppConstants
|
||||
import at.mocode.frontend.core.network.PlatformConfig
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
package at.mocode.frontend.core.auth.di
|
||||
|
||||
import at.mocode.frontend.core.auth.data.AuthApiClient
|
||||
import at.mocode.frontend.core.auth.data.AuthTokenManager
|
||||
import at.mocode.frontend.core.auth.data.remote.AuthApiClient
|
||||
import at.mocode.frontend.core.auth.data.local.AuthTokenManager
|
||||
import at.mocode.frontend.core.auth.presentation.LoginViewModel
|
||||
import at.mocode.frontend.core.domain.AppConstants
|
||||
import at.mocode.frontend.core.network.TokenProvider
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
package at.mocode.frontend.core.auth.data
|
||||
package at.mocode.frontend.core.auth.domain.service
|
||||
|
||||
/**
|
||||
* Ergebnis eines OIDC-Callback-Empfangs (Authorization Code + State).
|
||||
|
|
@ -2,7 +2,14 @@ package at.mocode.frontend.core.auth.presentation
|
|||
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import at.mocode.frontend.core.auth.data.*
|
||||
import at.mocode.frontend.core.auth.data.local.AuthState
|
||||
import at.mocode.frontend.core.auth.data.local.AuthTokenManager
|
||||
import at.mocode.frontend.core.auth.data.remote.AuthApiClient
|
||||
import at.mocode.frontend.core.auth.domain.service.OidcCallbackResult
|
||||
import at.mocode.frontend.core.auth.domain.service.consumePendingOidcCallback
|
||||
import at.mocode.frontend.core.auth.domain.service.getOidcRedirectUri
|
||||
import at.mocode.frontend.core.auth.domain.service.launchOidcFlow
|
||||
import at.mocode.frontend.core.auth.utils.PkceHelper
|
||||
import at.mocode.frontend.core.domain.AppConstants
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
package at.mocode.frontend.core.auth.data
|
||||
package at.mocode.frontend.core.auth.utils
|
||||
|
||||
import kotlin.random.Random
|
||||
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
@file:Suppress("REDUNDANT_CALL_OF_CONVERSION_METHOD")
|
||||
|
||||
package at.mocode.frontend.core.auth.data
|
||||
package at.mocode.frontend.core.auth.utils
|
||||
|
||||
/**
|
||||
* Reines Kotlin SHA-256 nach FIPS 180-4.
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package at.mocode.frontend.core.auth.data
|
||||
package at.mocode.frontend.core.auth.domain.service
|
||||
|
||||
import com.sun.net.httpserver.HttpServer
|
||||
import kotlinx.coroutines.CompletableDeferred
|
||||
|
|
@ -8,6 +8,7 @@ import kotlinx.coroutines.withTimeoutOrNull
|
|||
import java.awt.Desktop
|
||||
import java.net.InetSocketAddress
|
||||
import java.net.URI
|
||||
import kotlin.time.Duration.Companion.milliseconds
|
||||
|
||||
/**
|
||||
* JVM-Implementierung: öffnet den System-Browser und startet einen lokalen
|
||||
|
|
@ -71,7 +72,7 @@ actual suspend fun launchOidcFlow(
|
|||
}
|
||||
|
||||
// Warten auf Callback (max. 5 Minuten)
|
||||
return withTimeoutOrNull(5 * 60 * 1000L) {
|
||||
return withTimeoutOrNull((5 * 60 * 1000L).milliseconds) {
|
||||
deferred.await()
|
||||
} ?: run {
|
||||
server.stop(0)
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package at.mocode.frontend.core.auth.data
|
||||
package at.mocode.frontend.core.auth.domain.service
|
||||
|
||||
/**
|
||||
* Wasm-Implementierung für OIDC Redirect.
|
||||
|
|
@ -1,6 +1,10 @@
|
|||
@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING")
|
||||
|
||||
package at.mocode.frontend.features.deviceinitialization.domain
|
||||
|
||||
|
||||
package at.mocode.frontend.features.device.initialization.data.local
|
||||
import at.mocode.frontend.features.device.initialization.domain.model.DeviceInitializationSettings
|
||||
|
||||
|
||||
expect object DeviceInitializationSettingsManager {
|
||||
fun saveSettings(settings: DeviceInitializationSettings)
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING")
|
||||
|
||||
package at.mocode.frontend.features.device.initialization.di
|
||||
|
||||
import at.mocode.frontend.features.device.initialization.domain.model.DeviceInitializationSettings
|
||||
import at.mocode.frontend.features.device.initialization.presentation.DeviceInitializationViewModel
|
||||
import org.koin.dsl.module
|
||||
|
||||
val deviceInitializationModule = module {
|
||||
factory { (onComplete: (DeviceInitializationSettings) -> Unit) ->
|
||||
DeviceInitializationViewModel(get(), onComplete)
|
||||
}
|
||||
}
|
||||
|
|
@ -1,4 +1,9 @@
|
|||
package at.mocode.frontend.features.deviceinitialization.domain
|
||||
@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING")
|
||||
|
||||
package at.mocode.frontend.features.device.initialization.domain
|
||||
import at.mocode.frontend.features.device.initialization.domain.model.DeviceInitializationSettings
|
||||
import at.mocode.frontend.features.device.initialization.domain.model.NetworkRole
|
||||
|
||||
|
||||
/**
|
||||
* Validierungslogik für den Geräte-Initialisierungs-Wizard.
|
||||
|
|
@ -29,7 +34,6 @@ object DeviceInitializationValidator {
|
|||
fun canContinue(settings: DeviceInitializationSettings): Boolean {
|
||||
val basicValid = isNameValid(settings.deviceName) &&
|
||||
isKeyValid(settings.sharedKey) &&
|
||||
(if (settings.networkRole == NetworkRole.MASTER) isBackupPathValid(settings.backupPath) else true) &&
|
||||
isSyncIntervalValid(settings.syncInterval)
|
||||
|
||||
if (!basicValid) return false
|
||||
|
|
@ -1,4 +1,7 @@
|
|||
package at.mocode.frontend.features.deviceinitialization.domain
|
||||
@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING")
|
||||
|
||||
package at.mocode.frontend.features.device.initialization.domain.model
|
||||
|
||||
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
|
|
@ -1,4 +1,12 @@
|
|||
package at.mocode.frontend.features.deviceinitialization.presentation
|
||||
@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING")
|
||||
|
||||
package at.mocode.frontend.features.device.initialization.presentation
|
||||
import at.mocode.frontend.features.device.initialization.domain.model.DeviceInitializationSettings
|
||||
import at.mocode.frontend.features.device.initialization.domain.model.NetworkRole
|
||||
import at.mocode.frontend.features.device.initialization.domain.model.ExpectedClient
|
||||
|
||||
|
||||
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
|
|
@ -20,7 +28,7 @@ import androidx.compose.ui.input.key.*
|
|||
import androidx.compose.ui.platform.LocalFocusManager
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.unit.dp
|
||||
import at.mocode.frontend.features.deviceinitialization.domain.DeviceInitializationValidator
|
||||
import at.mocode.frontend.features.device.initialization.domain.DeviceInitializationValidator
|
||||
|
||||
@Composable
|
||||
fun DeviceInitializationScreen(
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING")
|
||||
|
||||
package at.mocode.frontend.features.device.initialization.presentation
|
||||
import at.mocode.frontend.features.device.initialization.domain.model.DeviceInitializationSettings
|
||||
import at.mocode.frontend.features.device.initialization.domain.model.NetworkRole
|
||||
import at.mocode.frontend.features.device.initialization.domain.model.ExpectedClient
|
||||
|
||||
|
||||
|
||||
|
||||
import at.mocode.frontend.core.network.discovery.DiscoveredService
|
||||
|
||||
data class DeviceInitializationUiState(
|
||||
val currentStep: Int = 0,
|
||||
val settings: DeviceInitializationSettings = DeviceInitializationSettings(),
|
||||
val discoveredMasters: List<DiscoveredService> = emptyList(),
|
||||
val isProcessing: Boolean = false,
|
||||
val error: String? = null
|
||||
)
|
||||
|
|
@ -1,11 +1,16 @@
|
|||
package at.mocode.frontend.features.deviceinitialization.presentation
|
||||
@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING")
|
||||
|
||||
package at.mocode.frontend.features.device.initialization.presentation
|
||||
import at.mocode.frontend.features.device.initialization.domain.model.DeviceInitializationSettings
|
||||
import at.mocode.frontend.features.device.initialization.domain.model.NetworkRole
|
||||
import at.mocode.frontend.features.device.initialization.domain.model.ExpectedClient
|
||||
|
||||
|
||||
|
||||
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import at.mocode.frontend.core.network.discovery.NetworkDiscoveryService
|
||||
import at.mocode.frontend.features.deviceinitialization.domain.DeviceInitializationSettings
|
||||
import at.mocode.frontend.features.deviceinitialization.domain.ExpectedClient
|
||||
import at.mocode.frontend.features.deviceinitialization.domain.NetworkRole
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
import kotlinx.coroutines.flow.asStateFlow
|
||||
|
|
@ -1,4 +1,12 @@
|
|||
package at.mocode.frontend.features.deviceinitialization.presentation
|
||||
@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING")
|
||||
|
||||
package at.mocode.frontend.features.device.initialization.presentation
|
||||
import at.mocode.frontend.features.device.initialization.domain.model.DeviceInitializationSettings
|
||||
import at.mocode.frontend.features.device.initialization.domain.model.NetworkRole
|
||||
import at.mocode.frontend.features.device.initialization.domain.model.ExpectedClient
|
||||
|
||||
|
||||
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
|
|
@ -10,7 +18,6 @@ import androidx.compose.ui.Alignment
|
|||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.input.key.*
|
||||
import androidx.compose.ui.unit.dp
|
||||
import at.mocode.frontend.features.deviceinitialization.domain.NetworkRole
|
||||
|
||||
@Composable
|
||||
fun NetworkRoleSelector(
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
package at.mocode.frontend.features.deviceinitialization.di
|
||||
|
||||
import at.mocode.frontend.features.deviceinitialization.presentation.DeviceInitializationViewModel
|
||||
import org.koin.dsl.module
|
||||
|
||||
val deviceInitializationModule = module {
|
||||
factory { (onComplete: (at.mocode.frontend.features.deviceinitialization.domain.DeviceInitializationSettings) -> Unit) ->
|
||||
DeviceInitializationViewModel(get(), onComplete)
|
||||
}
|
||||
}
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
package at.mocode.frontend.features.deviceinitialization.presentation
|
||||
|
||||
import at.mocode.frontend.core.network.discovery.DiscoveredService
|
||||
import at.mocode.frontend.features.deviceinitialization.domain.DeviceInitializationSettings
|
||||
|
||||
data class DeviceInitializationUiState(
|
||||
val currentStep: Int = 0,
|
||||
val settings: DeviceInitializationSettings = DeviceInitializationSettings(),
|
||||
val discoveredMasters: List<DiscoveredService> = emptyList(),
|
||||
val isProcessing: Boolean = false,
|
||||
val error: String? = null
|
||||
)
|
||||
|
|
@ -1,5 +1,9 @@
|
|||
package at.mocode.frontend.features.deviceinitialization.domain
|
||||
@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING")
|
||||
|
||||
package at.mocode.frontend.features.device.initialization.data.local
|
||||
|
||||
import at.mocode.frontend.features.device.initialization.domain.DeviceInitializationValidator
|
||||
import at.mocode.frontend.features.device.initialization.domain.model.DeviceInitializationSettings
|
||||
import kotlinx.serialization.json.Json
|
||||
import java.io.File
|
||||
|
||||
|
|
@ -1,4 +1,12 @@
|
|||
package at.mocode.frontend.features.deviceinitialization.presentation
|
||||
@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING")
|
||||
|
||||
package at.mocode.frontend.features.device.initialization.presentation
|
||||
import at.mocode.frontend.features.device.initialization.domain.model.DeviceInitializationSettings
|
||||
import at.mocode.frontend.features.device.initialization.domain.model.NetworkRole
|
||||
import at.mocode.frontend.features.device.initialization.domain.model.ExpectedClient
|
||||
|
||||
|
||||
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.text.KeyboardActions
|
||||
|
|
@ -29,8 +37,7 @@ import androidx.compose.ui.text.input.PasswordVisualTransformation
|
|||
import androidx.compose.ui.text.input.VisualTransformation
|
||||
import androidx.compose.ui.unit.dp
|
||||
import at.mocode.frontend.core.designsystem.components.MsEnumDropdown
|
||||
import at.mocode.frontend.features.deviceinitialization.domain.DeviceInitializationValidator
|
||||
import at.mocode.frontend.features.deviceinitialization.domain.NetworkRole
|
||||
import at.mocode.frontend.features.device.initialization.domain.DeviceInitializationValidator
|
||||
import java.io.File
|
||||
import javax.swing.JFileChooser
|
||||
import javax.swing.UIManager
|
||||
|
|
@ -1,7 +1,10 @@
|
|||
@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING")
|
||||
|
||||
package at.mocode.frontend.features.deviceinitialization.domain
|
||||
|
||||
package at.mocode.frontend.features.device.initialization.data.local
|
||||
|
||||
import at.mocode.frontend.features.device.initialization.domain.DeviceInitializationValidator
|
||||
import at.mocode.frontend.features.device.initialization.domain.model.DeviceInitializationSettings
|
||||
import kotlinx.browser.localStorage
|
||||
import kotlinx.serialization.json.Json
|
||||
|
||||
|
|
@ -21,7 +24,7 @@ actual object DeviceInitializationSettingsManager {
|
|||
actual fun loadSettings(): DeviceInitializationSettings? {
|
||||
val content = localStorage.getItem(SETTINGS_KEY) ?: return null
|
||||
return try {
|
||||
json.decodeFromString<DeviceInitializationSettings>(DeviceInitializationSettings.serializer(), content)
|
||||
json.decodeFromString(DeviceInitializationSettings.serializer(), content)
|
||||
} catch (e: Exception) {
|
||||
println("Fehler beim Laden der Einstellungen (WasmJS): ${e.message}")
|
||||
null
|
||||
|
|
@ -1,4 +1,12 @@
|
|||
package at.mocode.frontend.features.deviceinitialization.presentation
|
||||
@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING")
|
||||
|
||||
package at.mocode.frontend.features.device.initialization.presentation
|
||||
import at.mocode.frontend.features.device.initialization.domain.model.DeviceInitializationSettings
|
||||
import at.mocode.frontend.features.device.initialization.domain.model.NetworkRole
|
||||
import at.mocode.frontend.features.device.initialization.domain.model.ExpectedClient
|
||||
|
||||
|
||||
|
||||
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Column
|
||||
|
|
@ -13,7 +21,7 @@ import androidx.compose.ui.Modifier
|
|||
import androidx.compose.ui.text.input.PasswordVisualTransformation
|
||||
import androidx.compose.ui.text.input.VisualTransformation
|
||||
import androidx.compose.ui.unit.dp
|
||||
import at.mocode.frontend.features.deviceinitialization.domain.DeviceInitializationValidator
|
||||
import at.mocode.frontend.features.device.initialization.domain.DeviceInitializationValidator
|
||||
|
||||
@Composable
|
||||
actual fun DeviceInitializationConfig(
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
package at.mocode.frontend.features.profile.data
|
||||
|
||||
import at.mocode.frontend.core.auth.data.AuthTokenManager
|
||||
import at.mocode.frontend.core.auth.data.local.AuthTokenManager
|
||||
import at.mocode.frontend.core.network.PlatformConfig
|
||||
import io.ktor.client.*
|
||||
import io.ktor.client.call.*
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ import androidx.compose.runtime.setValue
|
|||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import at.mocode.core.domain.serialization.UuidSerializer
|
||||
import at.mocode.frontend.core.auth.data.AuthTokenManager
|
||||
import at.mocode.frontend.core.auth.data.local.AuthTokenManager
|
||||
import at.mocode.frontend.core.domain.zns.ZnsImportProvider
|
||||
import at.mocode.frontend.core.network.NetworkConfig
|
||||
import io.ktor.client.*
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import androidx.compose.runtime.mutableStateOf
|
|||
import androidx.compose.runtime.setValue
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import at.mocode.frontend.core.auth.data.AuthTokenManager
|
||||
import at.mocode.frontend.core.auth.data.local.AuthTokenManager
|
||||
import at.mocode.frontend.core.domain.repository.MasterdataRepository
|
||||
import at.mocode.frontend.core.domain.zns.ZnsImportProvider
|
||||
import at.mocode.frontend.core.domain.zns.ZnsImportState
|
||||
|
|
|
|||
|
|
@ -2,11 +2,5 @@
|
|||
"deviceName": "Meldestelle",
|
||||
"sharedKey": "Password",
|
||||
"backupPath": "/mocode/meldestelle/docs/temp",
|
||||
"networkRole": "MASTER",
|
||||
"expectedClients": [
|
||||
{
|
||||
"name": "Richter-Turm",
|
||||
"role": "RICHTER"
|
||||
}
|
||||
]
|
||||
"networkRole": "MASTER"
|
||||
}
|
||||
|
|
@ -10,12 +10,12 @@ import androidx.compose.runtime.getValue
|
|||
import androidx.compose.ui.Modifier
|
||||
import at.mocode.desktop.navigation.DesktopNavigationPort
|
||||
import at.mocode.desktop.screens.layout.DesktopMainLayout
|
||||
import at.mocode.frontend.core.auth.data.AuthTokenManager
|
||||
import at.mocode.frontend.core.auth.data.local.AuthTokenManager
|
||||
import at.mocode.frontend.core.auth.presentation.LoginScreen
|
||||
import at.mocode.frontend.core.auth.presentation.LoginViewModel
|
||||
import at.mocode.frontend.core.designsystem.theme.AppTheme
|
||||
import at.mocode.frontend.core.navigation.AppScreen
|
||||
import at.mocode.frontend.features.deviceinitialization.domain.DeviceInitializationSettingsManager
|
||||
import at.mocode.frontend.features.device.initialization.data.local.DeviceInitializationSettingsManager
|
||||
import org.koin.compose.koinInject
|
||||
import org.koin.compose.viewmodel.koinViewModel
|
||||
|
||||
|
|
|
|||
|
|
@ -1,13 +1,13 @@
|
|||
package at.mocode.desktop.di
|
||||
|
||||
import at.mocode.desktop.navigation.DesktopNavigationPort
|
||||
import at.mocode.frontend.core.auth.data.AuthTokenManager
|
||||
import at.mocode.desktop.repository.DesktopMasterdataRepository
|
||||
import at.mocode.frontend.core.auth.data.local.AuthTokenManager
|
||||
import at.mocode.frontend.core.domain.models.User
|
||||
import at.mocode.frontend.core.domain.repository.MasterdataRepository
|
||||
import at.mocode.frontend.core.navigation.CurrentUserProvider
|
||||
import at.mocode.frontend.core.navigation.DeepLinkHandler
|
||||
import at.mocode.frontend.core.navigation.NavigationPort
|
||||
import at.mocode.desktop.repository.DesktopMasterdataRepository
|
||||
import at.mocode.frontend.core.domain.repository.MasterdataRepository
|
||||
import org.koin.dsl.module
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ import at.mocode.frontend.core.localdb.localDbModule
|
|||
import at.mocode.frontend.core.network.networkModule
|
||||
import at.mocode.frontend.core.sync.di.syncModule
|
||||
import at.mocode.frontend.features.billing.di.billingModule
|
||||
import at.mocode.frontend.features.deviceinitialization.di.deviceInitializationModule
|
||||
import at.mocode.frontend.features.device.initialization.di.deviceInitializationModule
|
||||
import at.mocode.frontend.features.nennung.di.nennungFeatureModule
|
||||
import at.mocode.frontend.features.pferde.di.pferdeModule
|
||||
import at.mocode.frontend.features.profile.di.profileModule
|
||||
|
|
|
|||
|
|
@ -25,9 +25,12 @@ import at.mocode.desktop.screens.management.VeranstalterDetail
|
|||
import at.mocode.desktop.screens.management.VeranstalterVerwaltungScreen
|
||||
import at.mocode.desktop.screens.nennung.NennungsEingangScreen
|
||||
import at.mocode.desktop.screens.profile.FunktionaerProfil
|
||||
import at.mocode.desktop.screens.veranstaltung.*
|
||||
import at.mocode.desktop.screens.veranstaltung.details.*
|
||||
import at.mocode.desktop.screens.veranstaltung.wizards.*
|
||||
import at.mocode.desktop.screens.veranstaltung.VeranstaltungVerwaltung
|
||||
import at.mocode.desktop.screens.veranstaltung.details.VeranstaltungKonfig
|
||||
import at.mocode.desktop.screens.veranstaltung.details.VeranstaltungProfilScreen
|
||||
import at.mocode.desktop.screens.veranstaltung.wizards.TurnierWizard
|
||||
import at.mocode.desktop.screens.veranstaltung.wizards.VeranstalterAnlegenWizard
|
||||
import at.mocode.frontend.core.auth.data.local.AuthTokenManager
|
||||
import at.mocode.frontend.core.designsystem.theme.AppColors
|
||||
import at.mocode.frontend.core.designsystem.theme.Dimens
|
||||
import at.mocode.frontend.core.domain.zns.ZnsImportProvider
|
||||
|
|
@ -36,12 +39,12 @@ import at.mocode.frontend.core.network.ConnectivityTracker
|
|||
import at.mocode.frontend.core.network.discovery.NetworkDiscoveryService
|
||||
import at.mocode.frontend.features.billing.presentation.BillingScreen
|
||||
import at.mocode.frontend.features.billing.presentation.BillingViewModel
|
||||
import at.mocode.frontend.features.deviceinitialization.domain.DeviceInitializationSettings
|
||||
import at.mocode.frontend.features.deviceinitialization.domain.DeviceInitializationSettingsManager
|
||||
import at.mocode.frontend.features.deviceinitialization.presentation.DeviceInitializationScreen
|
||||
import at.mocode.frontend.features.deviceinitialization.presentation.DeviceInitializationViewModel
|
||||
import at.mocode.frontend.features.nennung.presentation.NennungViewModel
|
||||
import at.mocode.frontend.features.device.initialization.data.local.DeviceInitializationSettingsManager
|
||||
import at.mocode.frontend.features.device.initialization.domain.model.DeviceInitializationSettings
|
||||
import at.mocode.frontend.features.device.initialization.presentation.DeviceInitializationScreen
|
||||
import at.mocode.frontend.features.device.initialization.presentation.DeviceInitializationViewModel
|
||||
import at.mocode.frontend.features.nennung.presentation.NennungManagementScreen
|
||||
import at.mocode.frontend.features.nennung.presentation.NennungViewModel
|
||||
import at.mocode.frontend.features.pferde.presentation.PferdeScreen
|
||||
import at.mocode.frontend.features.pferde.presentation.PferdeViewModel
|
||||
import at.mocode.frontend.features.profile.presentation.ProfileScreen
|
||||
|
|
@ -535,7 +538,7 @@ private fun DesktopContentArea(
|
|||
DeviceInitializationSettingsManager.saveSettings(finalSettings)
|
||||
// Vision_04: Sicherheitsschlüssel als Token setzen, damit Cloud-Suche funktioniert
|
||||
val authTokenManager =
|
||||
org.koin.core.context.GlobalContext.get().get<at.mocode.frontend.core.auth.data.AuthTokenManager>()
|
||||
org.koin.core.context.GlobalContext.get().get<AuthTokenManager>()
|
||||
authTokenManager.setToken(finalSettings.sharedKey)
|
||||
onSettingsChange(finalSettings)
|
||||
onNavigate(AppScreen.VeranstaltungVerwaltung)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user