mirror of
https://github.com/msfjarvis/compose-lobsters
synced 2025-08-17 22:37:03 +05:30
data: add database for lobsters posts
Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
This commit is contained in:
parent
699a475315
commit
96c25c428d
6 changed files with 112 additions and 2 deletions
|
@ -5,6 +5,7 @@ buildscript {
|
|||
dagger_version = '2.29.1'
|
||||
hilt_version = '2.29-alpha'
|
||||
kotlin_version = '1.4.10'
|
||||
moshi_version = '1.9.3'
|
||||
room_version = '2.3.0-alpha02'
|
||||
}
|
||||
repositories {
|
||||
|
|
|
@ -4,7 +4,10 @@ plugins {
|
|||
}
|
||||
|
||||
dependencies {
|
||||
implementation project(":model")
|
||||
kapt "androidx.room:room-compiler:$room_version"
|
||||
api "androidx.room:room-runtime:$room_version"
|
||||
api "androidx.room:room-ktx:$room_version"
|
||||
implementation "androidx.room:room-ktx:$room_version"
|
||||
implementation "com.squareup.moshi:moshi:$moshi_version"
|
||||
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines_version"
|
||||
}
|
||||
|
|
|
@ -0,0 +1,63 @@
|
|||
package dev.msfjarvis.lobsters.data.source
|
||||
|
||||
import androidx.room.TypeConverter
|
||||
import com.squareup.moshi.Moshi
|
||||
import dev.msfjarvis.lobsters.model.KeybaseSignature
|
||||
import dev.msfjarvis.lobsters.model.KeybaseSignatureJsonAdapter
|
||||
import dev.msfjarvis.lobsters.model.LobstersPost
|
||||
import dev.msfjarvis.lobsters.model.LobstersPostJsonAdapter
|
||||
import dev.msfjarvis.lobsters.model.Submitter
|
||||
import dev.msfjarvis.lobsters.model.SubmitterJsonAdapter
|
||||
|
||||
object LobstersApiTypeConverters {
|
||||
private val moshi = Moshi.Builder().build()
|
||||
private const val SEPARATOR = ","
|
||||
|
||||
@TypeConverter
|
||||
@JvmStatic
|
||||
fun toSubmitterUser(value: String?): Submitter? {
|
||||
return value?.let { SubmitterJsonAdapter(moshi).fromJson(value) }
|
||||
}
|
||||
|
||||
@TypeConverter
|
||||
@JvmStatic
|
||||
fun fromSubmitterUser(value: Submitter?): String? {
|
||||
return value?.let { SubmitterJsonAdapter(moshi).toJson(value) }
|
||||
}
|
||||
|
||||
@TypeConverter
|
||||
@JvmStatic
|
||||
fun toKeybaseSignature(value: String?): KeybaseSignature? {
|
||||
return value?.let { KeybaseSignatureJsonAdapter(moshi).fromJson(value) }
|
||||
}
|
||||
|
||||
@TypeConverter
|
||||
@JvmStatic
|
||||
fun fromKeybaseSignature(value: KeybaseSignature?): String? {
|
||||
return value?.let { KeybaseSignatureJsonAdapter(moshi).toJson(value) }
|
||||
}
|
||||
|
||||
@TypeConverter
|
||||
@JvmStatic
|
||||
fun toLobstersPost(value: String?): LobstersPost? {
|
||||
return value?.let { LobstersPostJsonAdapter(moshi).fromJson(value) }
|
||||
}
|
||||
|
||||
@TypeConverter
|
||||
@JvmStatic
|
||||
fun fromLobstersPost(value: LobstersPost?): String? {
|
||||
return value?.let { LobstersPostJsonAdapter(moshi).toJson(value) }
|
||||
}
|
||||
|
||||
@TypeConverter
|
||||
@JvmStatic
|
||||
fun toTagList(value: String?): List<String>? {
|
||||
return value?.split(SEPARATOR)
|
||||
}
|
||||
|
||||
@TypeConverter
|
||||
@JvmStatic
|
||||
fun fromTagList(value: List<String>?): String? {
|
||||
return value?.joinToString(SEPARATOR)
|
||||
}
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
package dev.msfjarvis.lobsters.data.source
|
||||
|
||||
import androidx.room.Dao
|
||||
import androidx.room.Delete
|
||||
import androidx.room.Insert
|
||||
import androidx.room.Query
|
||||
import dev.msfjarvis.lobsters.model.LobstersPost
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
||||
@Dao
|
||||
abstract class PostsDao {
|
||||
@Query("SELECT * FROM lobsters_posts")
|
||||
abstract fun loadPosts(): Flow<List<LobstersPost>>
|
||||
|
||||
@Insert
|
||||
abstract suspend fun insertPosts(vararg posts: LobstersPost)
|
||||
|
||||
@Delete
|
||||
abstract suspend fun deletePosts(vararg posts: LobstersPost)
|
||||
|
||||
@Query("DELETE FROM lobsters_posts")
|
||||
abstract suspend fun deleteAllPosts()
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
package dev.msfjarvis.lobsters.data.source
|
||||
|
||||
import androidx.room.Database
|
||||
import androidx.room.RoomDatabase
|
||||
import androidx.room.TypeConverters
|
||||
import dev.msfjarvis.lobsters.model.LobstersPost
|
||||
|
||||
@Database(
|
||||
entities = [
|
||||
LobstersPost::class,
|
||||
],
|
||||
version = 1,
|
||||
exportSchema = false,
|
||||
)
|
||||
@TypeConverters(
|
||||
LobstersApiTypeConverters::class,
|
||||
DateTimeTypeConverters::class,
|
||||
)
|
||||
abstract class PostsDatabase : RoomDatabase() {
|
||||
abstract fun postsDao(): PostsDao
|
||||
}
|
|
@ -4,7 +4,6 @@ plugins {
|
|||
}
|
||||
|
||||
dependencies {
|
||||
def moshi_version = "1.9.3"
|
||||
api "androidx.room:room-runtime:$room_version"
|
||||
kapt "com.squareup.moshi:moshi-kotlin-codegen:$moshi_version"
|
||||
implementation "com.squareup.moshi:moshi:$moshi_version"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue