From edadcc6744e1f2bb217ff60f045fcda82b8511b7 Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Mon, 14 Aug 2023 13:23:00 +0530 Subject: [PATCH] refactor(database): expose `*Queries` objects to the DI graph --- .../android/viewmodel/CommentsRepository.kt | 5 ++-- .../viewmodel/DataTransferRepository.kt | 7 ++--- .../android/viewmodel/SavedPostsRepository.kt | 5 ++-- .../claw/database/injection/QueriesModule.kt | 30 +++++++++++++++++++ 4 files changed, 37 insertions(+), 10 deletions(-) create mode 100644 database/src/main/kotlin/dev/msfjarvis/claw/database/injection/QueriesModule.kt diff --git a/android/src/main/kotlin/dev/msfjarvis/claw/android/viewmodel/CommentsRepository.kt b/android/src/main/kotlin/dev/msfjarvis/claw/android/viewmodel/CommentsRepository.kt index 3dae088e..e0ad9839 100644 --- a/android/src/main/kotlin/dev/msfjarvis/claw/android/viewmodel/CommentsRepository.kt +++ b/android/src/main/kotlin/dev/msfjarvis/claw/android/viewmodel/CommentsRepository.kt @@ -7,8 +7,8 @@ package dev.msfjarvis.claw.android.viewmodel import dev.msfjarvis.claw.core.injection.DatabaseDispatcher -import dev.msfjarvis.claw.database.LobstersDatabase import dev.msfjarvis.claw.database.local.PostComments +import dev.msfjarvis.claw.database.local.PostCommentsQueries import dev.msfjarvis.claw.model.Comment import javax.inject.Inject import kotlinx.coroutines.CoroutineDispatcher @@ -17,10 +17,9 @@ import kotlinx.coroutines.withContext class CommentsRepository @Inject constructor( - database: LobstersDatabase, + private val postCommentsQueries: PostCommentsQueries, @DatabaseDispatcher private val dbDispatcher: CoroutineDispatcher, ) { - private val postCommentsQueries = database.postCommentsQueries suspend fun getSeenComments(postId: String) = withContext(dbDispatcher) { postCommentsQueries.getCommentIds(postId).executeAsOneOrNull() } diff --git a/android/src/main/kotlin/dev/msfjarvis/claw/android/viewmodel/DataTransferRepository.kt b/android/src/main/kotlin/dev/msfjarvis/claw/android/viewmodel/DataTransferRepository.kt index b6a40b77..39c445e4 100644 --- a/android/src/main/kotlin/dev/msfjarvis/claw/android/viewmodel/DataTransferRepository.kt +++ b/android/src/main/kotlin/dev/msfjarvis/claw/android/viewmodel/DataTransferRepository.kt @@ -8,9 +8,9 @@ package dev.msfjarvis.claw.android.viewmodel import dev.msfjarvis.claw.core.injection.DatabaseDispatcher import dev.msfjarvis.claw.core.injection.IODispatcher -import dev.msfjarvis.claw.database.LobstersDatabase import dev.msfjarvis.claw.database.SavedPostSerializer import dev.msfjarvis.claw.database.local.SavedPost +import dev.msfjarvis.claw.database.local.SavedPostQueries import java.io.InputStream import java.io.OutputStream import javax.inject.Inject @@ -26,13 +26,12 @@ import kotlinx.serialization.json.encodeToStream class DataTransferRepository @Inject constructor( - private val database: LobstersDatabase, private val json: Json, + private val savedPostQueries: SavedPostQueries, @DatabaseDispatcher private val dbDispatcher: CoroutineDispatcher, @IODispatcher private val ioDispatcher: CoroutineDispatcher, ) { private val serializer = ListSerializer(SavedPostSerializer) - private val savedPostQueries = database.savedPostQueries suspend fun importPosts(input: InputStream) { val posts: List = @@ -43,7 +42,7 @@ constructor( ) } withContext(dbDispatcher) { - database.transaction { posts.forEach(savedPostQueries::insertOrReplacePost) } + savedPostQueries.transaction { posts.forEach(savedPostQueries::insertOrReplacePost) } } } diff --git a/android/src/main/kotlin/dev/msfjarvis/claw/android/viewmodel/SavedPostsRepository.kt b/android/src/main/kotlin/dev/msfjarvis/claw/android/viewmodel/SavedPostsRepository.kt index eb26934d..7886ca6a 100644 --- a/android/src/main/kotlin/dev/msfjarvis/claw/android/viewmodel/SavedPostsRepository.kt +++ b/android/src/main/kotlin/dev/msfjarvis/claw/android/viewmodel/SavedPostsRepository.kt @@ -9,8 +9,8 @@ package dev.msfjarvis.claw.android.viewmodel import app.cash.sqldelight.coroutines.asFlow import app.cash.sqldelight.coroutines.mapToList import dev.msfjarvis.claw.core.injection.DatabaseDispatcher -import dev.msfjarvis.claw.database.LobstersDatabase import dev.msfjarvis.claw.database.local.SavedPost +import dev.msfjarvis.claw.database.local.SavedPostQueries import io.github.aakira.napier.Napier import javax.inject.Inject import kotlinx.coroutines.CoroutineDispatcher @@ -19,10 +19,9 @@ import kotlinx.coroutines.withContext class SavedPostsRepository @Inject constructor( - database: LobstersDatabase, + private val savedPostQueries: SavedPostQueries, @DatabaseDispatcher private val dbDispatcher: CoroutineDispatcher, ) { - private val savedPostQueries = database.savedPostQueries val savedPosts = savedPostQueries.selectAllPosts().asFlow().mapToList(dbDispatcher) suspend fun savePost(post: SavedPost) { diff --git a/database/src/main/kotlin/dev/msfjarvis/claw/database/injection/QueriesModule.kt b/database/src/main/kotlin/dev/msfjarvis/claw/database/injection/QueriesModule.kt new file mode 100644 index 00000000..e99c5376 --- /dev/null +++ b/database/src/main/kotlin/dev/msfjarvis/claw/database/injection/QueriesModule.kt @@ -0,0 +1,30 @@ +/* + * Copyright © 2023 Harsh Shandilya. + * Use of this source code is governed by an MIT-style + * license that can be found in the LICENSE file or at + * https://opensource.org/licenses/MIT. + */ +package dev.msfjarvis.claw.database.injection + +import com.deliveryhero.whetstone.app.ApplicationScope +import com.squareup.anvil.annotations.ContributesTo +import dagger.Module +import dagger.Provides +import dev.msfjarvis.claw.database.LobstersDatabase +import dev.msfjarvis.claw.database.local.PostCommentsQueries +import dev.msfjarvis.claw.database.local.SavedPostQueries + +@Module +@ContributesTo(ApplicationScope::class) +object QueriesModule { + + @Provides + fun provideSavedPostsQueries(database: LobstersDatabase): SavedPostQueries { + return database.savedPostQueries + } + + @Provides + fun providePostCommentsQueries(database: LobstersDatabase): PostCommentsQueries { + return database.postCommentsQueries + } +}