diff --git a/database/src/main/kotlin/dev/msfjarvis/claw/database/injection/DatabaseModule.kt b/database/src/main/kotlin/dev/msfjarvis/claw/database/injection/DatabaseModule.kt index 549fc5a8..ce668538 100644 --- a/database/src/main/kotlin/dev/msfjarvis/claw/database/injection/DatabaseModule.kt +++ b/database/src/main/kotlin/dev/msfjarvis/claw/database/injection/DatabaseModule.kt @@ -1,5 +1,5 @@ /* - * Copyright © 2021-2022 Harsh Shandilya. + * Copyright © 2021-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. @@ -15,8 +15,9 @@ import com.squareup.anvil.annotations.ContributesTo import dagger.Module import dagger.Provides import dev.msfjarvis.claw.database.LobstersDatabase +import dev.msfjarvis.claw.database.local.PostComments import dev.msfjarvis.claw.database.local.SavedPost -import dev.msfjarvis.claw.database.model.TagsAdapter +import dev.msfjarvis.claw.database.model.CSVAdapter @Module @ContributesTo(ApplicationScope::class) @@ -27,6 +28,10 @@ object DatabaseModule { @Provides fun provideDatabase(@ForScope(ApplicationScope::class) context: Context): LobstersDatabase { val driver = AndroidSqliteDriver(LobstersDatabase.Schema, context, LOBSTERS_DATABASE_NAME) - return LobstersDatabase(driver, SavedPost.Adapter(IntColumnAdapter, TagsAdapter())) + return LobstersDatabase( + driver, + PostComments.Adapter(CSVAdapter()), + SavedPost.Adapter(IntColumnAdapter, CSVAdapter()), + ) } } diff --git a/database/src/main/kotlin/dev/msfjarvis/claw/database/local/Database.kt b/database/src/main/kotlin/dev/msfjarvis/claw/database/local/Database.kt deleted file mode 100644 index 96edb1ad..00000000 --- a/database/src/main/kotlin/dev/msfjarvis/claw/database/local/Database.kt +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright © 2021-2022 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.local - -import android.content.Context -import app.cash.sqldelight.adapter.primitive.IntColumnAdapter -import app.cash.sqldelight.driver.android.AndroidSqliteDriver -import dev.msfjarvis.claw.database.LobstersDatabase -import dev.msfjarvis.claw.database.model.TagsAdapter - -internal const val LobstersDatabaseName = "SavedPosts.db" - -fun createDatabase(context: Context): LobstersDatabase { - val driver = AndroidSqliteDriver(LobstersDatabase.Schema, context, LobstersDatabaseName) - return LobstersDatabase(driver, SavedPost.Adapter(IntColumnAdapter, TagsAdapter())) -} diff --git a/database/src/main/kotlin/dev/msfjarvis/claw/database/model/TagsAdapter.kt b/database/src/main/kotlin/dev/msfjarvis/claw/database/model/CSVAdapter.kt similarity index 83% rename from database/src/main/kotlin/dev/msfjarvis/claw/database/model/TagsAdapter.kt rename to database/src/main/kotlin/dev/msfjarvis/claw/database/model/CSVAdapter.kt index 4c20cc2a..0488d658 100644 --- a/database/src/main/kotlin/dev/msfjarvis/claw/database/model/TagsAdapter.kt +++ b/database/src/main/kotlin/dev/msfjarvis/claw/database/model/CSVAdapter.kt @@ -1,5 +1,5 @@ /* - * Copyright © 2021-2022 Harsh Shandilya. + * Copyright © 2021-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. @@ -8,7 +8,7 @@ package dev.msfjarvis.claw.database.model import app.cash.sqldelight.ColumnAdapter -class TagsAdapter : ColumnAdapter, String> { +class CSVAdapter : ColumnAdapter, String> { override fun decode(databaseValue: String): List { return databaseValue.split(SEPARATOR) } diff --git a/database/src/main/sqldelight/databases/1.db b/database/src/main/sqldelight/databases/1.db index 908d4844..3724e2df 100644 Binary files a/database/src/main/sqldelight/databases/1.db and b/database/src/main/sqldelight/databases/1.db differ diff --git a/database/src/main/sqldelight/dev/msfjarvis/claw/database/local/PostComments.sq b/database/src/main/sqldelight/dev/msfjarvis/claw/database/local/PostComments.sq new file mode 100644 index 00000000..3dcb0716 --- /dev/null +++ b/database/src/main/sqldelight/dev/msfjarvis/claw/database/local/PostComments.sq @@ -0,0 +1,17 @@ +import kotlin.String; +import kotlin.collections.List; + +CREATE TABLE IF NOT EXISTS PostComments( + postId TEXT NOT NULL PRIMARY KEY, + commentIds TEXT AS List NOT NULL +); + +rememberComments: +INSERT OR REPLACE +INTO PostComments +VALUES ?; + +getCommentIds: +SELECT * +FROM PostComments +WHERE postId = ?; diff --git a/database/src/test/kotlin/dev/msfjarvis/claw/database/local/PostCommentsQueriesTest.kt b/database/src/test/kotlin/dev/msfjarvis/claw/database/local/PostCommentsQueriesTest.kt new file mode 100644 index 00000000..823cc57b --- /dev/null +++ b/database/src/test/kotlin/dev/msfjarvis/claw/database/local/PostCommentsQueriesTest.kt @@ -0,0 +1,47 @@ +/* + * 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.local + +import app.cash.sqldelight.adapter.primitive.IntColumnAdapter +import app.cash.sqldelight.driver.jdbc.sqlite.JdbcSqliteDriver +import dev.msfjarvis.claw.database.LobstersDatabase +import dev.msfjarvis.claw.database.model.CSVAdapter +import io.kotest.core.spec.style.FunSpec +import io.kotest.matchers.collections.shouldHaveSize +import io.kotest.matchers.shouldBe +import java.util.UUID + +class PostCommentsQueriesTest : FunSpec() { + private lateinit var postQueries: PostCommentsQueries + init { + beforeEach { + val driver = JdbcSqliteDriver(JdbcSqliteDriver.IN_MEMORY) + LobstersDatabase.Schema.create(driver) + val database = + LobstersDatabase( + driver, + PostComments.Adapter(CSVAdapter()), + SavedPost.Adapter(IntColumnAdapter, CSVAdapter()), + ) + postQueries = database.postCommentsQueries + } + + test("get non-existent post") { + val ids = postQueries.getCommentIds(UUID.randomUUID().toString()).executeAsOneOrNull() + ids shouldBe null + } + + test("put and get post comments") { + val postId = UUID.randomUUID().toString() + val comments = PostComments(postId, List(10) { UUID.randomUUID().toString() }) + postQueries.rememberComments(comments) + + val ids = postQueries.getCommentIds(postId).executeAsOne().commentIds + ids shouldHaveSize 10 + } + } +} diff --git a/database/src/test/kotlin/dev/msfjarvis/claw/database/local/SavedPostQueriesTest.kt b/database/src/test/kotlin/dev/msfjarvis/claw/database/local/SavedPostQueriesTest.kt index 8a12216b..30cdecb1 100644 --- a/database/src/test/kotlin/dev/msfjarvis/claw/database/local/SavedPostQueriesTest.kt +++ b/database/src/test/kotlin/dev/msfjarvis/claw/database/local/SavedPostQueriesTest.kt @@ -9,7 +9,7 @@ package dev.msfjarvis.claw.database.local import app.cash.sqldelight.adapter.primitive.IntColumnAdapter import app.cash.sqldelight.driver.jdbc.sqlite.JdbcSqliteDriver import dev.msfjarvis.claw.database.LobstersDatabase -import dev.msfjarvis.claw.database.model.TagsAdapter +import dev.msfjarvis.claw.database.model.CSVAdapter import io.kotest.core.spec.style.FunSpec import io.kotest.matchers.collections.shouldBeEmpty import io.kotest.matchers.collections.shouldHaveSize @@ -26,7 +26,8 @@ class SavedPostQueriesTest : FunSpec() { val database = LobstersDatabase( driver, - SavedPost.Adapter(IntColumnAdapter, TagsAdapter()), + PostComments.Adapter(CSVAdapter()), + SavedPost.Adapter(IntColumnAdapter, CSVAdapter()), ) postQueries = database.savedPostQueries }