diff --git a/core/database/build.gradle.kts b/core/database/build.gradle.kts index 839ef114c..f0463937c 100644 --- a/core/database/build.gradle.kts +++ b/core/database/build.gradle.kts @@ -16,7 +16,7 @@ plugins { alias(libs.plugins.nowinandroid.kmp.library) - alias(libs.plugins.nowinandroid.kotlin.inject) + alias(libs.plugins.nowinandroid.di.koin) alias(libs.plugins.sqldelight.gradle.plugin) } diff --git a/core/database/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/core/database/di/DriverModule.kt b/core/database/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/core/database/di/DriverProvider.kt similarity index 89% rename from core/database/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/core/database/di/DriverModule.kt rename to core/database/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/core/database/di/DriverProvider.kt index b217dbe24..c3242f6a7 100644 --- a/core/database/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/core/database/di/DriverModule.kt +++ b/core/database/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/core/database/di/DriverProvider.kt @@ -24,13 +24,11 @@ import app.cash.sqldelight.db.SqlDriver import app.cash.sqldelight.db.SqlSchema import app.cash.sqldelight.driver.android.AndroidSqliteDriver import app.cash.sqldelight.driver.android.AndroidSqliteDriver.Callback -import me.tatarka.inject.annotations.Component -import me.tatarka.inject.annotations.Provides +import org.koin.core.annotation.Single -@Component -internal actual abstract class DriverModule(private val context: Context) { +@Single +internal actual class DriverProvider(val context: Context) { - @Provides actual suspend fun provideDbDriver( schema: SqlSchema>, ): SqlDriver { diff --git a/core/database/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao.kt b/core/database/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao.kt index f5436443d..372119cf4 100644 --- a/core/database/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao.kt +++ b/core/database/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao.kt @@ -26,13 +26,12 @@ import com.google.samples.apps.nowinandroid.core.model.data.NewsResource import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.flow.Flow import kotlinx.datetime.Instant -import me.tatarka.inject.annotations.Inject /** * DAO for [NewsResource] and [NewsResourceEntity] access */ -@Inject -class NewsResourceDao(db: NiaDatabase, private val dispatcher: CoroutineDispatcher) : NewsResourceDaoInterface { +class NewsResourceDao(db: NiaDatabase, private val dispatcher: CoroutineDispatcher) : + NewsResourceDaoInterface { private val query = db.newsResourceQueries /** diff --git a/core/database/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/database/dao/NewsResourceFtsDao.kt b/core/database/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/database/dao/NewsResourceFtsDao.kt index ee2419e77..9b6b5e5ca 100644 --- a/core/database/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/database/dao/NewsResourceFtsDao.kt +++ b/core/database/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/database/dao/NewsResourceFtsDao.kt @@ -24,12 +24,10 @@ import com.google.samples.apps.nowinandroid.core.database.model.NewsResourceFtsE import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map -import me.tatarka.inject.annotations.Inject /** * DAO for [NewsResourceFtsEntity] access. */ -@Inject class NewsResourceFtsDao(db: NiaDatabase, private val dispatcher: CoroutineDispatcher) : NewsResourceFtsDaoInterface { private val dbQuery = db.newsResourceFtsQueries override suspend fun insertAll(newsResources: List) { diff --git a/core/database/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/database/dao/RecentSearchQueryDao.kt b/core/database/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/database/dao/RecentSearchQueryDao.kt index 58e23a1de..b1b005a2c 100644 --- a/core/database/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/database/dao/RecentSearchQueryDao.kt +++ b/core/database/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/database/dao/RecentSearchQueryDao.kt @@ -24,12 +24,10 @@ import com.google.samples.apps.nowinandroid.core.database.model.RecentSearchQuer import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.flow.Flow import kotlinx.datetime.Instant -import me.tatarka.inject.annotations.Inject /** * DAO for [RecentSearchQueryEntity] access */ -@Inject class RecentSearchQueryDao(db: NiaDatabase, private val dispatcher: CoroutineDispatcher) : RecentSearchQueryDaoInterface { private val query = db.recentSearchQueryQueries diff --git a/core/database/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/database/dao/TopicDao.kt b/core/database/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/database/dao/TopicDao.kt index 4f3796f7f..2ebeb23ac 100644 --- a/core/database/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/database/dao/TopicDao.kt +++ b/core/database/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/database/dao/TopicDao.kt @@ -24,12 +24,10 @@ import com.google.samples.apps.nowinandroid.core.database.model.TopicEntity import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map -import me.tatarka.inject.annotations.Inject /** * DAO for [TopicEntity] access */ -@Inject class TopicDao(db: NiaDatabase, private val dispatcher: CoroutineDispatcher) : TopicDaoInterface { private val query = db.topicsQueries diff --git a/core/database/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/database/dao/TopicFtsDao.kt b/core/database/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/database/dao/TopicFtsDao.kt index dd5a86473..de96556a0 100644 --- a/core/database/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/database/dao/TopicFtsDao.kt +++ b/core/database/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/database/dao/TopicFtsDao.kt @@ -24,12 +24,10 @@ import com.google.samples.apps.nowinandroid.core.database.model.TopicFtsEntity import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map -import me.tatarka.inject.annotations.Inject /** * DAO for [TopicFtsEntity] access. */ -@Inject class TopicFtsDao(db: NiaDatabase, private val dispatcher: CoroutineDispatcher) : TopicFtsDaoInterface { private val dbQuery = db.topicFtsQueries diff --git a/core/database/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/database/di/DatabaseModule.kt b/core/database/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/database/di/DatabaseModule.kt index 37d332fda..fa663504f 100644 --- a/core/database/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/database/di/DatabaseModule.kt +++ b/core/database/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/database/di/DatabaseModule.kt @@ -23,43 +23,48 @@ import com.google.samples.apps.nowinandroid.core.database.dao.NewsResourceFtsDao import com.google.samples.apps.nowinandroid.core.database.dao.RecentSearchQueryDao import com.google.samples.apps.nowinandroid.core.database.dao.TopicDao import com.google.samples.apps.nowinandroid.core.database.dao.TopicFtsDao -import com.google.samples.apps.nowinandroid.core.di.Dispatcher -import com.google.samples.apps.nowinandroid.core.di.DispatchersComponent -import com.google.samples.apps.nowinandroid.core.di.NiaDispatchers.IO -import kotlinx.coroutines.CoroutineDispatcher -import me.tatarka.inject.annotations.Component -import me.tatarka.inject.annotations.Provides +import kotlinx.coroutines.runBlocking +import org.koin.core.annotation.ComponentScan +import org.koin.core.annotation.Module +import org.koin.core.qualifier.named +import org.koin.dsl.module +import org.koin.ksp.generated.module -@Component -abstract class DatabaseModule(@Component val dispatchersComponent: DispatchersComponent) { - @Dispatcher(IO) - abstract val dispatcher: CoroutineDispatcher +internal val driverModule = module { + single { NiaDatabase.Schema } + single { + val driverProvider: DriverProvider = get() + // TODO check if we can remove runBlocking + runBlocking { + driverProvider.provideDbDriver(get()) + } + } +} - @Provides - fun providesNiaDatabase(driver: SqlDriver): NiaDatabase = NiaDatabase(driver) +internal val daoModule = module { + single { (driver: SqlDriver) -> NiaDatabase(driver) } - @Provides - fun providesTopicsDao( - database: NiaDatabase, - ): TopicDao = TopicDao(database, dispatcher) + factory { (database: NiaDatabase) -> TopicDao(database, get(named("IoDispatcher"))) } - @Provides - fun providesNewsResourceDao( - database: NiaDatabase, - ): NewsResourceDao = NewsResourceDao(database, dispatcher) + factory { (database: NiaDatabase) -> NewsResourceDao(database, get(named("IoDispatcher"))) } - @Provides - fun providesTopicFtsDao( - database: NiaDatabase, - ): TopicFtsDao = TopicFtsDao(database, dispatcher) + factory { (database: NiaDatabase) -> TopicFtsDao(database, get(named("IoDispatcher"))) } - @Provides - fun providesNewsResourceFtsDao( - database: NiaDatabase, - ): NewsResourceFtsDao = NewsResourceFtsDao(database, dispatcher) + factory { (database: NiaDatabase) -> NewsResourceFtsDao(database, get(named("IoDispatcher"))) } - @Provides - fun providesRecentSearchQueryDao( - database: NiaDatabase, - ): RecentSearchQueryDao = RecentSearchQueryDao(database, dispatcher) + factory { (database: NiaDatabase) -> + RecentSearchQueryDao( + database, + get(named("IoDispatcher")), + ) + } } + +val databaseModule = listOf( + DatabaseModule().module, + daoModule, +) + +@Module +@ComponentScan +class DatabaseModule diff --git a/core/database/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/database/di/DriverModule.kt b/core/database/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/database/di/DriverProvider.kt similarity index 89% rename from core/database/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/database/di/DriverModule.kt rename to core/database/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/database/di/DriverProvider.kt index 656c38a16..552b88a39 100644 --- a/core/database/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/database/di/DriverModule.kt +++ b/core/database/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/database/di/DriverProvider.kt @@ -19,10 +19,8 @@ package com.google.samples.apps.nowinandroid.core.database.di import app.cash.sqldelight.db.QueryResult.AsyncValue import app.cash.sqldelight.db.SqlDriver import app.cash.sqldelight.db.SqlSchema -import me.tatarka.inject.annotations.Provides -internal expect abstract class DriverModule { - @Provides +internal expect class DriverProvider { suspend fun provideDbDriver( schema: SqlSchema>, ): SqlDriver diff --git a/core/database/src/jvmMain/kotlin/com/google/samples/apps/nowinandroid/core/database/di/DriverModule.kt b/core/database/src/jvmMain/kotlin/com/google/samples/apps/nowinandroid/core/database/di/DriverProvider.kt similarity index 88% rename from core/database/src/jvmMain/kotlin/com/google/samples/apps/nowinandroid/core/database/di/DriverModule.kt rename to core/database/src/jvmMain/kotlin/com/google/samples/apps/nowinandroid/core/database/di/DriverProvider.kt index 43e2b739a..49c92cdc3 100644 --- a/core/database/src/jvmMain/kotlin/com/google/samples/apps/nowinandroid/core/database/di/DriverModule.kt +++ b/core/database/src/jvmMain/kotlin/com/google/samples/apps/nowinandroid/core/database/di/DriverProvider.kt @@ -20,13 +20,12 @@ import app.cash.sqldelight.db.QueryResult.AsyncValue import app.cash.sqldelight.db.SqlDriver import app.cash.sqldelight.db.SqlSchema import app.cash.sqldelight.driver.jdbc.sqlite.JdbcSqliteDriver -import me.tatarka.inject.annotations.Component -import me.tatarka.inject.annotations.Provides +import org.koin.core.annotation.Single import java.util.Properties -@Component -internal actual abstract class DriverModule { - @Provides +@Single +internal actual class DriverProvider { + actual suspend fun provideDbDriver( schema: SqlSchema>, ): SqlDriver { diff --git a/core/database/src/nativeMain/kotlin/com/google/samples/apps/nowinandroid/core/database/di/DriverModule.kt b/core/database/src/nativeMain/kotlin/com/google/samples/apps/nowinandroid/core/database/di/DriverProvider.kt similarity index 90% rename from core/database/src/nativeMain/kotlin/com/google/samples/apps/nowinandroid/core/database/di/DriverModule.kt rename to core/database/src/nativeMain/kotlin/com/google/samples/apps/nowinandroid/core/database/di/DriverProvider.kt index a26fab962..e88bc8506 100644 --- a/core/database/src/nativeMain/kotlin/com/google/samples/apps/nowinandroid/core/database/di/DriverModule.kt +++ b/core/database/src/nativeMain/kotlin/com/google/samples/apps/nowinandroid/core/database/di/DriverProvider.kt @@ -23,13 +23,11 @@ import app.cash.sqldelight.db.SqlSchema import app.cash.sqldelight.driver.native.NativeSqliteDriver import co.touchlab.sqliter.DatabaseConfiguration import co.touchlab.sqliter.DatabaseConfiguration.Extended -import me.tatarka.inject.annotations.Component -import me.tatarka.inject.annotations.Provides +import org.koin.core.annotation.Single -@Component -internal actual abstract class DriverModule { +@Single +internal actual class DriverProvider { - @Provides actual suspend fun provideDbDriver( schema: SqlSchema>, ): SqlDriver {