Skip to content

Commit 659181b

Browse files
committed
Add schemas and queries.
1 parent 9bc111a commit 659181b

File tree

5 files changed

+60
-4
lines changed

5 files changed

+60
-4
lines changed

android/app/src/main/java/io/github/reactivecircus/kstreamlined/android/di/PersistenceModule.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ import dagger.Provides
77
import dagger.hilt.InstallIn
88
import dagger.hilt.android.qualifiers.ApplicationContext
99
import dagger.hilt.components.SingletonComponent
10+
import io.github.reactivecircus.kstreamlined.kmp.persistence.database.FeedItemEntity
11+
import io.github.reactivecircus.kstreamlined.kmp.persistence.database.InstantAdapter
1012
import io.github.reactivecircus.kstreamlined.kmp.persistence.database.KStreamlinedDatabase
1113
import javax.inject.Singleton
1214

@@ -24,6 +26,9 @@ object PersistenceModule {
2426
schema = KStreamlinedDatabase.Schema,
2527
context = context,
2628
name = "kstreamlined.db",
29+
),
30+
feedItemEntityAdapter = FeedItemEntity.Adapter(
31+
publishTimeAdapter = InstantAdapter
2732
)
2833
)
2934
}

kmp/persistence/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ kotlin {
1717
commonMain {
1818
dependencies {
1919
implementation(libs.androidx.dataStore)
20+
api(libs.kotlinx.datetime)
2021
}
2122
}
2223
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package io.github.reactivecircus.kstreamlined.kmp.persistence.database
2+
3+
import app.cash.sqldelight.ColumnAdapter
4+
import kotlinx.datetime.Instant
5+
import kotlinx.datetime.toInstant
6+
7+
public val InstantAdapter: ColumnAdapter<Instant, String> = object : ColumnAdapter<Instant, String> {
8+
override fun decode(databaseValue: String): Instant {
9+
return databaseValue.toInstant()
10+
}
11+
12+
override fun encode(value: Instant): String {
13+
return value.toString()
14+
}
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import kotlin.Boolean;
2+
3+
CREATE TABLE feedOriginEntity (
4+
key TEXT NOT NULL PRIMARY KEY,
5+
title TEXT NOT NULL,
6+
description TEXT NOT NULL,
7+
selected INTEGER AS Boolean NOT NULL
8+
);
9+
10+
CREATE INDEX index_feedOriginEntity_selected ON feedOriginEntity(selected);
11+
12+
allFeedOrigins:
13+
SELECT * FROM feedOriginEntity;
14+
15+
upsertFeedOrigin:
16+
INSERT OR REPLACE INTO feedOriginEntity
17+
VALUES (:key, :title, :description, :selected);
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,29 @@
11
import kotlin.Boolean;
2+
import kotlinx.datetime.Instant;
23

34
CREATE TABLE feedItemEntity (
45
id TEXT NOT NULL PRIMARY KEY,
6+
feedOriginKey TEXT NOT NULL,
57
title TEXT NOT NULL,
6-
publishTime TEXT NOT NULL,
7-
savedForLater INTEGER AS Boolean NOT NULL
8+
publishTime TEXT AS Instant NOT NULL,
9+
contentUrl TEXT NOT NULL,
10+
imageUrl TEXT,
11+
savedForLater INTEGER AS Boolean NOT NULL,
12+
FOREIGN KEY(feedOriginKey) REFERENCES feedOriginEntity(key) ON DELETE CASCADE
813
);
914

10-
findAllFeedItems:
11-
SELECT * FROM feedItemEntity;
15+
CREATE INDEX index_feedItemEntity_feedOriginKey ON feedItemEntity(feedOriginKey);
16+
CREATE INDEX index_feedItemEntity_savedForLater ON feedItemEntity(savedForLater);
17+
18+
feedItemsForSelectedOrigins:
19+
SELECT feedItemEntity.* FROM feedItemEntity
20+
JOIN feedOriginEntity ON feedItemEntity.feedOriginKey = feedOriginEntity.key
21+
WHERE feedOriginEntity.selected = 1
22+
ORDER BY feedItemEntity.publishTime DESC;
23+
24+
savedFeedItems:
25+
SELECT * FROM feedItemEntity WHERE savedForLater = 1 ORDER BY publishTime DESC;
26+
27+
upsertFeedItem:
28+
INSERT OR REPLACE INTO feedItemEntity
29+
VALUES (:id, :feedOriginKey, :title, :publishTime, :contentUrl, :imageUrl, :savedForLater);

0 commit comments

Comments
 (0)