|
|
|
|
@ -16,42 +16,54 @@
|
|
|
|
|
|
|
|
|
|
package com.google.samples.apps.nowinandroid.core.database.di
|
|
|
|
|
|
|
|
|
|
import app.cash.sqldelight.db.QueryResult
|
|
|
|
|
import app.cash.sqldelight.db.SqlDriver
|
|
|
|
|
import app.cash.sqldelight.db.SqlSchema
|
|
|
|
|
import com.google.samples.apps.nowinandroid.core.database.NiaDatabase
|
|
|
|
|
import com.google.samples.apps.nowinandroid.core.database.dao.NewsResourceDao
|
|
|
|
|
import com.google.samples.apps.nowinandroid.core.database.dao.NewsResourceDaoInterface
|
|
|
|
|
import com.google.samples.apps.nowinandroid.core.database.dao.NewsResourceFtsDao
|
|
|
|
|
import com.google.samples.apps.nowinandroid.core.database.dao.NewsResourceFtsDaoInterface
|
|
|
|
|
import com.google.samples.apps.nowinandroid.core.database.dao.RecentSearchQueryDao
|
|
|
|
|
import com.google.samples.apps.nowinandroid.core.database.dao.RecentSearchQueryDaoInterface
|
|
|
|
|
import com.google.samples.apps.nowinandroid.core.database.dao.TopicDao
|
|
|
|
|
import com.google.samples.apps.nowinandroid.core.database.dao.TopicDaoInterface
|
|
|
|
|
import com.google.samples.apps.nowinandroid.core.database.dao.TopicFtsDao
|
|
|
|
|
import kotlinx.coroutines.runBlocking
|
|
|
|
|
import org.koin.core.annotation.ComponentScan
|
|
|
|
|
import org.koin.core.annotation.Module
|
|
|
|
|
import com.google.samples.apps.nowinandroid.core.database.dao.TopicFtsDaoInterface
|
|
|
|
|
import com.google.samples.apps.nowinandroid.core.di.coroutineDispatcherModule
|
|
|
|
|
import org.koin.core.module.Module
|
|
|
|
|
import org.koin.dsl.module
|
|
|
|
|
import org.koin.ksp.generated.module
|
|
|
|
|
|
|
|
|
|
internal val driverModule = module {
|
|
|
|
|
single { NiaDatabase.Schema }
|
|
|
|
|
single<SqlDriver> {
|
|
|
|
|
val driverProvider: DriverProvider = get()
|
|
|
|
|
// TODO check if we can remove runBlocking
|
|
|
|
|
runBlocking {
|
|
|
|
|
driverProvider.provideDbDriver(get())
|
|
|
|
|
}
|
|
|
|
|
internal expect val driverModule: Module
|
|
|
|
|
|
|
|
|
|
internal val schemaModule = module {
|
|
|
|
|
single<SqlSchema<QueryResult.AsyncValue<Unit>>> { NiaDatabase.Schema }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
internal val dbModule = module {
|
|
|
|
|
single { (driver: SqlDriver) ->
|
|
|
|
|
NiaDatabase(driver)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
internal val daoModule = module {
|
|
|
|
|
single { (driver: SqlDriver) -> NiaDatabase(driver) }
|
|
|
|
|
|
|
|
|
|
factory { (database: NiaDatabase) -> TopicDao(database, get()) }
|
|
|
|
|
factory<TopicDaoInterface> { (database: NiaDatabase) ->
|
|
|
|
|
TopicDao(database, get())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
factory { (database: NiaDatabase) -> NewsResourceDao(database, get()) }
|
|
|
|
|
factory <NewsResourceDaoInterface> { (database: NiaDatabase) ->
|
|
|
|
|
NewsResourceDao(database, get())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
factory { (database: NiaDatabase) -> TopicFtsDao(database, get()) }
|
|
|
|
|
factory<TopicFtsDaoInterface> { (database: NiaDatabase) ->
|
|
|
|
|
TopicFtsDao(database, get())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
factory { (database: NiaDatabase) -> NewsResourceFtsDao(database, get()) }
|
|
|
|
|
factory<NewsResourceFtsDaoInterface> { (database: NiaDatabase) ->
|
|
|
|
|
NewsResourceFtsDao(database, get())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
factory { (database: NiaDatabase) ->
|
|
|
|
|
factory<RecentSearchQueryDaoInterface> { (database: NiaDatabase) ->
|
|
|
|
|
RecentSearchQueryDao(
|
|
|
|
|
database,
|
|
|
|
|
get(),
|
|
|
|
|
@ -59,12 +71,12 @@ internal val daoModule = module {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fun databaseModule() = listOf(
|
|
|
|
|
driverModule,
|
|
|
|
|
DatabaseModule().module,
|
|
|
|
|
daoModule,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
@Module
|
|
|
|
|
@ComponentScan
|
|
|
|
|
class DatabaseModule
|
|
|
|
|
val databaseModule: Module get() = module {
|
|
|
|
|
includes(coroutineDispatcherModule)
|
|
|
|
|
includes(
|
|
|
|
|
schemaModule,
|
|
|
|
|
driverModule,
|
|
|
|
|
dbModule,
|
|
|
|
|
daoModule,
|
|
|
|
|
)
|
|
|
|
|
}
|