feat(store): set up a preliminary implementation for newest posts

This commit is contained in:
Harsh Shandilya 2023-08-03 18:22:22 +05:30 committed by GitHub
parent 14007c6e8f
commit 45701f414b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
11 changed files with 165 additions and 12 deletions

View file

@ -15,6 +15,7 @@ import com.squareup.anvil.annotations.ContributesTo
import dagger.Module
import dagger.Provides
import dev.msfjarvis.claw.database.LobstersDatabase
import dev.msfjarvis.claw.database.local.CachedNewestPost
import dev.msfjarvis.claw.database.local.PostComments
import dev.msfjarvis.claw.database.local.SavedPost
import dev.msfjarvis.claw.database.model.CSVAdapter
@ -37,8 +38,10 @@ object DatabaseModule {
)
return LobstersDatabase(
driver = driver,
PostCommentsAdapter = PostComments.Adapter(CSVAdapter()),
SavedPostAdapter = SavedPost.Adapter(IntColumnAdapter, CSVAdapter()),
PostCommentsAdapter = PostComments.Adapter(CSVAdapter),
SavedPostAdapter = SavedPost.Adapter(IntColumnAdapter, CSVAdapter),
CachedNewestPostAdapter =
CachedNewestPost.Adapter(IntColumnAdapter, IntColumnAdapter, CSVAdapter),
)
}
}

View file

@ -8,7 +8,9 @@ package dev.msfjarvis.claw.database.model
import app.cash.sqldelight.ColumnAdapter
class CSVAdapter : ColumnAdapter<List<String>, String> {
object CSVAdapter : ColumnAdapter<List<String>, String> {
private const val SEPARATOR = ","
override fun decode(databaseValue: String): List<String> {
return databaseValue.split(SEPARATOR)
}
@ -16,8 +18,4 @@ class CSVAdapter : ColumnAdapter<List<String>, String> {
override fun encode(value: List<String>): String {
return value.joinToString(SEPARATOR)
}
private companion object {
private const val SEPARATOR = ","
}
}

View file

@ -0,0 +1,31 @@
import kotlin.Int;
import kotlin.String;
import kotlin.collections.List;
CREATE TABLE IF NOT EXISTS CachedNewestPost(
pageNumber INTEGER AS Int,
shortId TEXT NOT NULL PRIMARY KEY,
title TEXT NOT NULL,
url TEXT NOT NULL,
description TEXT NOT NULL,
commentCount INTEGER AS Int,
commentsUrl TEXT NOT NULL,
tags TEXT AS List<String> NOT NULL
);
insertPost:
INSERT OR REPLACE
INTO CachedNewestPost
VALUES ?;
getPage:
SELECT *
FROM CachedNewestPost
WHERE pageNumber = ?;
clearPage:
DELETE FROM CachedNewestPost
WHERE pageNumber = ?;
deleteAll:
DELETE FROM CachedNewestPost;

View file

@ -0,0 +1,14 @@
import kotlin.Int;
import kotlin.String;
import kotlin.collections.List;
CREATE TABLE IF NOT EXISTS CachedNewestPost(
pageNumber INTEGER AS Int,
shortId TEXT NOT NULL PRIMARY KEY,
title TEXT NOT NULL,
url TEXT NOT NULL,
description TEXT NOT NULL,
commentCount INTEGER AS Int,
commentsUrl TEXT NOT NULL,
tags TEXT AS List<String> NOT NULL
);

View file

@ -25,8 +25,9 @@ class PostCommentsQueriesTest {
val database =
LobstersDatabase(
driver,
PostComments.Adapter(CSVAdapter()),
SavedPost.Adapter(IntColumnAdapter, CSVAdapter()),
CachedNewestPost.Adapter(IntColumnAdapter, IntColumnAdapter, CSVAdapter),
PostComments.Adapter(CSVAdapter),
SavedPost.Adapter(IntColumnAdapter, CSVAdapter),
)
postQueries = database.postCommentsQueries
}

View file

@ -24,8 +24,9 @@ class SavedPostQueriesTest {
val database =
LobstersDatabase(
driver,
PostComments.Adapter(CSVAdapter()),
SavedPost.Adapter(IntColumnAdapter, CSVAdapter()),
CachedNewestPost.Adapter(IntColumnAdapter, IntColumnAdapter, CSVAdapter),
PostComments.Adapter(CSVAdapter),
SavedPost.Adapter(IntColumnAdapter, CSVAdapter),
)
postQueries = database.savedPostQueries
}