From a8d99b516867bb9d0803f22c54cb16ca85e77464 Mon Sep 17 00:00:00 2001 From: StefanMoCoAt Date: Sat, 6 Dec 2025 22:48:02 +0100 Subject: [PATCH] refactor(core): MP-25 Move User and AuthToken to core-domain --- frontend/core/domain/build.gradle.kts | 40 +++++++++++++++++++ .../frontend/core/domain/models/AuthToken.kt | 10 +++++ .../frontend/core/domain/models/User.kt | 11 +++++ .../clients/authfeature/AuthApiClient.kt | 3 +- frontend/shared/build.gradle.kts | 1 + .../mocode/shared/domain/model/ApiModels.kt | 18 --------- .../shared/presentation/actions/AppAction.kt | 4 +- .../shared/presentation/state/AppState.kt | 4 +- settings.gradle.kts | 1 + 9 files changed, 68 insertions(+), 24 deletions(-) create mode 100644 frontend/core/domain/build.gradle.kts create mode 100644 frontend/core/domain/src/commonMain/kotlin/at/mocode/frontend/core/domain/models/AuthToken.kt create mode 100644 frontend/core/domain/src/commonMain/kotlin/at/mocode/frontend/core/domain/models/User.kt diff --git a/frontend/core/domain/build.gradle.kts b/frontend/core/domain/build.gradle.kts new file mode 100644 index 00000000..f5c9d81e --- /dev/null +++ b/frontend/core/domain/build.gradle.kts @@ -0,0 +1,40 @@ +@file:OptIn(ExperimentalKotlinGradlePluginApi::class) + +import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi +import org.jetbrains.kotlin.gradle.dsl.JvmTarget + +plugins { + alias(libs.plugins.kotlinMultiplatform) + alias(libs.plugins.kotlinSerialization) +} + +kotlin { + val enableWasm = providers.gradleProperty("enableWasm").orNull == "true" + + jvmToolchain(21) + + jvm() + js { + browser { + testTask { enabled = false } + } + } + + if (enableWasm) { + @OptIn(org.jetbrains.kotlin.gradle.ExperimentalWasmDsl::class) + wasmJs { browser() } + } + + sourceSets { + commonMain.dependencies { + implementation(libs.kotlinx.serialization.json) + } + } +} + +tasks.withType { + compilerOptions { + jvmTarget.set(JvmTarget.JVM_21) + freeCompilerArgs.addAll("-opt-in=kotlin.RequiresOptIn") + } +} diff --git a/frontend/core/domain/src/commonMain/kotlin/at/mocode/frontend/core/domain/models/AuthToken.kt b/frontend/core/domain/src/commonMain/kotlin/at/mocode/frontend/core/domain/models/AuthToken.kt new file mode 100644 index 00000000..03ada0ba --- /dev/null +++ b/frontend/core/domain/src/commonMain/kotlin/at/mocode/frontend/core/domain/models/AuthToken.kt @@ -0,0 +1,10 @@ +package at.mocode.frontend.core.domain.models + +import kotlinx.serialization.Serializable + +@Serializable +data class AuthToken( + val accessToken: String, + val tokenType: String = "Bearer", + val expiresAtEpochMillis: Long? = null +) diff --git a/frontend/core/domain/src/commonMain/kotlin/at/mocode/frontend/core/domain/models/User.kt b/frontend/core/domain/src/commonMain/kotlin/at/mocode/frontend/core/domain/models/User.kt new file mode 100644 index 00000000..c9d83253 --- /dev/null +++ b/frontend/core/domain/src/commonMain/kotlin/at/mocode/frontend/core/domain/models/User.kt @@ -0,0 +1,11 @@ +package at.mocode.frontend.core.domain.models + +import kotlinx.serialization.Serializable + +@Serializable +data class User( + val id: String, + val username: String, + val displayName: String? = null, + val roles: List = emptyList() +) diff --git a/frontend/features/auth-feature/src/commonMain/kotlin/at/mocode/clients/authfeature/AuthApiClient.kt b/frontend/features/auth-feature/src/commonMain/kotlin/at/mocode/clients/authfeature/AuthApiClient.kt index 69a681ca..7695501c 100644 --- a/frontend/features/auth-feature/src/commonMain/kotlin/at/mocode/clients/authfeature/AuthApiClient.kt +++ b/frontend/features/auth-feature/src/commonMain/kotlin/at/mocode/clients/authfeature/AuthApiClient.kt @@ -1,12 +1,11 @@ package at.mocode.clients.authfeature import at.mocode.shared.core.AppConstants +import io.ktor.client.* import io.ktor.client.call.* import io.ktor.client.request.forms.* import io.ktor.http.* import kotlinx.serialization.Serializable -import io.ktor.client.HttpClient -import org.koin.core.qualifier.named /** * Data classes for authentication API communication diff --git a/frontend/shared/build.gradle.kts b/frontend/shared/build.gradle.kts index 790088cb..7f0554bb 100644 --- a/frontend/shared/build.gradle.kts +++ b/frontend/shared/build.gradle.kts @@ -46,6 +46,7 @@ kotlin { api(projects.core.coreUtils) api(projects.core.coreDomain) + api(project(":frontend:core:domain")) // Kotlinx core dependencies (coroutines, serialization, datetime) implementation(libs.bundles.kotlinx.core) diff --git a/frontend/shared/src/commonMain/kotlin/at/mocode/shared/domain/model/ApiModels.kt b/frontend/shared/src/commonMain/kotlin/at/mocode/shared/domain/model/ApiModels.kt index f56c6105..af86b1ca 100644 --- a/frontend/shared/src/commonMain/kotlin/at/mocode/shared/domain/model/ApiModels.kt +++ b/frontend/shared/src/commonMain/kotlin/at/mocode/shared/domain/model/ApiModels.kt @@ -39,21 +39,3 @@ data class PingData( val service: String ) -/** - * Minimale User- und Auth-Models für Shared-Kernel (Quick-Fix für Build). - * Hinweis: Für MP-25 können diese in :frontend:core:domain verschoben/ausgebaut werden. - */ -@Serializable -data class AuthToken( - val accessToken: String, - val tokenType: String = "Bearer", - val expiresAtEpochMillis: Long? = null -) - -@Serializable -data class User( - val id: String, - val username: String, - val displayName: String? = null, - val roles: List = emptyList() -) diff --git a/frontend/shared/src/commonMain/kotlin/at/mocode/shared/presentation/actions/AppAction.kt b/frontend/shared/src/commonMain/kotlin/at/mocode/shared/presentation/actions/AppAction.kt index b28b3b5e..d575816c 100644 --- a/frontend/shared/src/commonMain/kotlin/at/mocode/shared/presentation/actions/AppAction.kt +++ b/frontend/shared/src/commonMain/kotlin/at/mocode/shared/presentation/actions/AppAction.kt @@ -1,8 +1,8 @@ package at.mocode.shared.presentation.actions import at.mocode.shared.presentation.state.Notification -import at.mocode.shared.domain.model.User -import at.mocode.shared.domain.model.AuthToken +import at.mocode.frontend.core.domain.models.User +import at.mocode.frontend.core.domain.models.AuthToken sealed class AppAction { // Auth Actions diff --git a/frontend/shared/src/commonMain/kotlin/at/mocode/shared/presentation/state/AppState.kt b/frontend/shared/src/commonMain/kotlin/at/mocode/shared/presentation/state/AppState.kt index f807c44a..696c1c0b 100644 --- a/frontend/shared/src/commonMain/kotlin/at/mocode/shared/presentation/state/AppState.kt +++ b/frontend/shared/src/commonMain/kotlin/at/mocode/shared/presentation/state/AppState.kt @@ -1,8 +1,8 @@ package at.mocode.shared.presentation.state import kotlinx.serialization.Serializable -import at.mocode.shared.domain.model.User -import at.mocode.shared.domain.model.AuthToken +import at.mocode.frontend.core.domain.models.User +import at.mocode.frontend.core.domain.models.AuthToken @Serializable data class AppState( diff --git a/settings.gradle.kts b/settings.gradle.kts index 08ad1bcb..f42ebaad 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -112,6 +112,7 @@ include(":docs") // FRONTEND // ========================================================================== // --- CORE --- +include(":frontend:core:domain") include(":frontend:core:design-system") include(":frontend:core:navigation") include(":frontend:core:network")