From fdeeee9bf8e58286075502e76618083f1d374539 Mon Sep 17 00:00:00 2001 From: Antoine Jaury Date: Fri, 19 Jun 2026 17:44:03 +0200 Subject: [PATCH] refactor: restructure logging package, separate into data, domain, and di modules --- core/logging/build.gradle.kts | 4 ++ .../gwenedeg/core/logging/KermitLogger.kt | 26 ------------- .../core/logging/data/KermitLogger.kt | 39 +++++++++++++++++++ .../gwenedeg/core/logging/di/LoggingModule.kt | 10 +++++ .../core/logging/{ => domain}/Logger.kt | 2 +- .../kotlin/fr/ajaury/gwenedeg/App.kt | 2 + .../kotlin/fr/ajaury/gwenedeg/di/Modules.kt | 3 -- .../player/ui/viewmodel/PlayerViewModel.kt | 2 +- .../subtitle/data/LrcSubtitleRepository.kt | 2 +- 9 files changed, 58 insertions(+), 32 deletions(-) delete mode 100644 core/logging/src/commonMain/kotlin/fr/ajaury/gwenedeg/core/logging/KermitLogger.kt create mode 100644 core/logging/src/commonMain/kotlin/fr/ajaury/gwenedeg/core/logging/data/KermitLogger.kt create mode 100644 core/logging/src/commonMain/kotlin/fr/ajaury/gwenedeg/core/logging/di/LoggingModule.kt rename core/logging/src/commonMain/kotlin/fr/ajaury/gwenedeg/core/logging/{ => domain}/Logger.kt (91%) diff --git a/core/logging/build.gradle.kts b/core/logging/build.gradle.kts index 4fe6c03..0b46236 100644 --- a/core/logging/build.gradle.kts +++ b/core/logging/build.gradle.kts @@ -41,6 +41,10 @@ kotlin { commonMain.dependencies { // Logging implementation(libs.kermit) + + // DI + implementation(project.dependencies.platform(libs.koin.bom)) + implementation(libs.koin.core) } commonTest.dependencies { implementation(libs.kotlin.test) diff --git a/core/logging/src/commonMain/kotlin/fr/ajaury/gwenedeg/core/logging/KermitLogger.kt b/core/logging/src/commonMain/kotlin/fr/ajaury/gwenedeg/core/logging/KermitLogger.kt deleted file mode 100644 index f8af6d9..0000000 --- a/core/logging/src/commonMain/kotlin/fr/ajaury/gwenedeg/core/logging/KermitLogger.kt +++ /dev/null @@ -1,26 +0,0 @@ -package fr.ajaury.gwenedeg.core.logging - -import co.touchlab.kermit.Logger as Kermit - -/** - * Kermit-backed implementation (adapter) of the [Logger] port. - */ -class KermitLogger( - private val tag: String = "Gwenedeg", -) : Logger { - override fun debug(message: String, throwable: Throwable?) { - Kermit.d(throwable = throwable, tag = tag) { message } - } - - override fun info(message: String, throwable: Throwable?) { - Kermit.i(throwable = throwable, tag = tag) { message } - } - - override fun warning(message: String, throwable: Throwable?) { - Kermit.w(throwable = throwable, tag = tag) { message } - } - - override fun error(message: String, throwable: Throwable?) { - Kermit.e(throwable = throwable, tag = tag) { message } - } -} diff --git a/core/logging/src/commonMain/kotlin/fr/ajaury/gwenedeg/core/logging/data/KermitLogger.kt b/core/logging/src/commonMain/kotlin/fr/ajaury/gwenedeg/core/logging/data/KermitLogger.kt new file mode 100644 index 0000000..6aa37ca --- /dev/null +++ b/core/logging/src/commonMain/kotlin/fr/ajaury/gwenedeg/core/logging/data/KermitLogger.kt @@ -0,0 +1,39 @@ +package fr.ajaury.gwenedeg.core.logging.data + +import fr.ajaury.gwenedeg.core.logging.domain.Logger + +internal class KermitLogger( + private val tag: String = "Gwenedeg", +) : Logger { + override fun debug( + message: String, + throwable: Throwable?, + ) { + co.touchlab.kermit.Logger + .d(throwable = throwable, tag = tag) { message } + } + + override fun info( + message: String, + throwable: Throwable?, + ) { + co.touchlab.kermit.Logger + .i(throwable = throwable, tag = tag) { message } + } + + override fun warning( + message: String, + throwable: Throwable?, + ) { + co.touchlab.kermit.Logger + .w(throwable = throwable, tag = tag) { message } + } + + override fun error( + message: String, + throwable: Throwable?, + ) { + co.touchlab.kermit.Logger + .e(throwable = throwable, tag = tag) { message } + } +} diff --git a/core/logging/src/commonMain/kotlin/fr/ajaury/gwenedeg/core/logging/di/LoggingModule.kt b/core/logging/src/commonMain/kotlin/fr/ajaury/gwenedeg/core/logging/di/LoggingModule.kt new file mode 100644 index 0000000..b5edac8 --- /dev/null +++ b/core/logging/src/commonMain/kotlin/fr/ajaury/gwenedeg/core/logging/di/LoggingModule.kt @@ -0,0 +1,10 @@ +package fr.ajaury.gwenedeg.core.logging.di + +import fr.ajaury.gwenedeg.core.logging.data.KermitLogger +import fr.ajaury.gwenedeg.core.logging.domain.Logger +import org.koin.core.module.Module +import org.koin.dsl.module + +val loggingModule: Module = module { + single { KermitLogger() } +} diff --git a/core/logging/src/commonMain/kotlin/fr/ajaury/gwenedeg/core/logging/Logger.kt b/core/logging/src/commonMain/kotlin/fr/ajaury/gwenedeg/core/logging/domain/Logger.kt similarity index 91% rename from core/logging/src/commonMain/kotlin/fr/ajaury/gwenedeg/core/logging/Logger.kt rename to core/logging/src/commonMain/kotlin/fr/ajaury/gwenedeg/core/logging/domain/Logger.kt index 984371b..6d7ddca 100644 --- a/core/logging/src/commonMain/kotlin/fr/ajaury/gwenedeg/core/logging/Logger.kt +++ b/core/logging/src/commonMain/kotlin/fr/ajaury/gwenedeg/core/logging/domain/Logger.kt @@ -1,4 +1,4 @@ -package fr.ajaury.gwenedeg.core.logging +package fr.ajaury.gwenedeg.core.logging.domain /** * Logging abstraction so the rest of the app depends on this interface diff --git a/shared/src/commonMain/kotlin/fr/ajaury/gwenedeg/App.kt b/shared/src/commonMain/kotlin/fr/ajaury/gwenedeg/App.kt index a2b7cfb..7971921 100644 --- a/shared/src/commonMain/kotlin/fr/ajaury/gwenedeg/App.kt +++ b/shared/src/commonMain/kotlin/fr/ajaury/gwenedeg/App.kt @@ -7,6 +7,7 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.navigation3.runtime.NavEntry import androidx.navigation3.ui.NavDisplay import androidx.savedstate.compose.serialization.serializers.SnapshotStateListSerializer +import fr.ajaury.gwenedeg.core.logging.di.loggingModule import fr.ajaury.gwenedeg.di.sharedModule import fr.ajaury.gwenedeg.navigation.Route import fr.ajaury.gwenedeg.player.di.audioPlayerModule @@ -24,6 +25,7 @@ fun App() { modules( sharedModule, audioPlayerModule, + loggingModule ) }, ) { diff --git a/shared/src/commonMain/kotlin/fr/ajaury/gwenedeg/di/Modules.kt b/shared/src/commonMain/kotlin/fr/ajaury/gwenedeg/di/Modules.kt index 61841a4..adeab9d 100644 --- a/shared/src/commonMain/kotlin/fr/ajaury/gwenedeg/di/Modules.kt +++ b/shared/src/commonMain/kotlin/fr/ajaury/gwenedeg/di/Modules.kt @@ -1,7 +1,5 @@ package fr.ajaury.gwenedeg.di -import fr.ajaury.gwenedeg.core.logging.KermitLogger -import fr.ajaury.gwenedeg.core.logging.Logger import fr.ajaury.gwenedeg.player.ui.viewmodel.PlayerViewModel import fr.ajaury.gwenedeg.records.data.InMemoryRecordRepository import fr.ajaury.gwenedeg.records.domain.RecordRepository @@ -16,7 +14,6 @@ import org.koin.core.module.dsl.viewModelOf import org.koin.dsl.module val sharedModule = module { - single { KermitLogger() } factoryOf(::InMemoryRecordRepository) { bind() } factoryOf(::LrcParser) factoryOf(::LrcSubtitleRepository) { bind() } diff --git a/shared/src/commonMain/kotlin/fr/ajaury/gwenedeg/player/ui/viewmodel/PlayerViewModel.kt b/shared/src/commonMain/kotlin/fr/ajaury/gwenedeg/player/ui/viewmodel/PlayerViewModel.kt index 39a085a..c829b76 100644 --- a/shared/src/commonMain/kotlin/fr/ajaury/gwenedeg/player/ui/viewmodel/PlayerViewModel.kt +++ b/shared/src/commonMain/kotlin/fr/ajaury/gwenedeg/player/ui/viewmodel/PlayerViewModel.kt @@ -2,7 +2,7 @@ package fr.ajaury.gwenedeg.player.ui.viewmodel import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import fr.ajaury.gwenedeg.core.logging.Logger +import fr.ajaury.gwenedeg.core.logging.domain.Logger import fr.ajaury.gwenedeg.player.domain.AudioPlayer import fr.ajaury.gwenedeg.player.domain.AudioSessionManager import fr.ajaury.gwenedeg.player.model.PlaybackState diff --git a/shared/src/commonMain/kotlin/fr/ajaury/gwenedeg/subtitle/data/LrcSubtitleRepository.kt b/shared/src/commonMain/kotlin/fr/ajaury/gwenedeg/subtitle/data/LrcSubtitleRepository.kt index 0d10e52..c987749 100644 --- a/shared/src/commonMain/kotlin/fr/ajaury/gwenedeg/subtitle/data/LrcSubtitleRepository.kt +++ b/shared/src/commonMain/kotlin/fr/ajaury/gwenedeg/subtitle/data/LrcSubtitleRepository.kt @@ -1,6 +1,6 @@ package fr.ajaury.gwenedeg.subtitle.data -import fr.ajaury.gwenedeg.core.logging.Logger +import fr.ajaury.gwenedeg.core.logging.domain.Logger import fr.ajaury.gwenedeg.subtitle.domain.Subtitle import fr.ajaury.gwenedeg.subtitle.domain.SubtitleRepository import fr.ajaury.gwenedeg.subtitle.model.CantGetSubtitleException