mirror of
https://github.com/msfjarvis/compose-lobsters
synced 2025-08-15 08:47:03 +05:30
feat(database): add a table for post comments
This commit is contained in:
parent
3e2d32e4c9
commit
1ae0cbb95d
7 changed files with 77 additions and 27 deletions
|
@ -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
|
* Use of this source code is governed by an MIT-style
|
||||||
* license that can be found in the LICENSE file or at
|
* license that can be found in the LICENSE file or at
|
||||||
* https://opensource.org/licenses/MIT.
|
* https://opensource.org/licenses/MIT.
|
||||||
|
@ -15,8 +15,9 @@ import com.squareup.anvil.annotations.ContributesTo
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
import dagger.Provides
|
import dagger.Provides
|
||||||
import dev.msfjarvis.claw.database.LobstersDatabase
|
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.local.SavedPost
|
||||||
import dev.msfjarvis.claw.database.model.TagsAdapter
|
import dev.msfjarvis.claw.database.model.CSVAdapter
|
||||||
|
|
||||||
@Module
|
@Module
|
||||||
@ContributesTo(ApplicationScope::class)
|
@ContributesTo(ApplicationScope::class)
|
||||||
|
@ -27,6 +28,10 @@ object DatabaseModule {
|
||||||
@Provides
|
@Provides
|
||||||
fun provideDatabase(@ForScope(ApplicationScope::class) context: Context): LobstersDatabase {
|
fun provideDatabase(@ForScope(ApplicationScope::class) context: Context): LobstersDatabase {
|
||||||
val driver = AndroidSqliteDriver(LobstersDatabase.Schema, context, LOBSTERS_DATABASE_NAME)
|
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()),
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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()))
|
|
||||||
}
|
|
|
@ -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
|
* Use of this source code is governed by an MIT-style
|
||||||
* license that can be found in the LICENSE file or at
|
* license that can be found in the LICENSE file or at
|
||||||
* https://opensource.org/licenses/MIT.
|
* https://opensource.org/licenses/MIT.
|
||||||
|
@ -8,7 +8,7 @@ package dev.msfjarvis.claw.database.model
|
||||||
|
|
||||||
import app.cash.sqldelight.ColumnAdapter
|
import app.cash.sqldelight.ColumnAdapter
|
||||||
|
|
||||||
class TagsAdapter : ColumnAdapter<List<String>, String> {
|
class CSVAdapter : ColumnAdapter<List<String>, String> {
|
||||||
override fun decode(databaseValue: String): List<String> {
|
override fun decode(databaseValue: String): List<String> {
|
||||||
return databaseValue.split(SEPARATOR)
|
return databaseValue.split(SEPARATOR)
|
||||||
}
|
}
|
Binary file not shown.
|
@ -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<String> NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
rememberComments:
|
||||||
|
INSERT OR REPLACE
|
||||||
|
INTO PostComments
|
||||||
|
VALUES ?;
|
||||||
|
|
||||||
|
getCommentIds:
|
||||||
|
SELECT *
|
||||||
|
FROM PostComments
|
||||||
|
WHERE postId = ?;
|
|
@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -9,7 +9,7 @@ package dev.msfjarvis.claw.database.local
|
||||||
import app.cash.sqldelight.adapter.primitive.IntColumnAdapter
|
import app.cash.sqldelight.adapter.primitive.IntColumnAdapter
|
||||||
import app.cash.sqldelight.driver.jdbc.sqlite.JdbcSqliteDriver
|
import app.cash.sqldelight.driver.jdbc.sqlite.JdbcSqliteDriver
|
||||||
import dev.msfjarvis.claw.database.LobstersDatabase
|
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.core.spec.style.FunSpec
|
||||||
import io.kotest.matchers.collections.shouldBeEmpty
|
import io.kotest.matchers.collections.shouldBeEmpty
|
||||||
import io.kotest.matchers.collections.shouldHaveSize
|
import io.kotest.matchers.collections.shouldHaveSize
|
||||||
|
@ -26,7 +26,8 @@ class SavedPostQueriesTest : FunSpec() {
|
||||||
val database =
|
val database =
|
||||||
LobstersDatabase(
|
LobstersDatabase(
|
||||||
driver,
|
driver,
|
||||||
SavedPost.Adapter(IntColumnAdapter, TagsAdapter()),
|
PostComments.Adapter(CSVAdapter()),
|
||||||
|
SavedPost.Adapter(IntColumnAdapter, CSVAdapter()),
|
||||||
)
|
)
|
||||||
postQueries = database.savedPostQueries
|
postQueries = database.savedPostQueries
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue