mirror of
https://github.com/msfjarvis/compose-lobsters
synced 2025-08-18 05:37:02 +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'
|
dagger_version = '2.29.1'
|
||||||
hilt_version = '2.29-alpha'
|
hilt_version = '2.29-alpha'
|
||||||
kotlin_version = '1.4.10'
|
kotlin_version = '1.4.10'
|
||||||
|
moshi_version = '1.9.3'
|
||||||
room_version = '2.3.0-alpha02'
|
room_version = '2.3.0-alpha02'
|
||||||
}
|
}
|
||||||
repositories {
|
repositories {
|
||||||
|
|
|
@ -4,7 +4,10 @@ plugins {
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
implementation project(":model")
|
||||||
kapt "androidx.room:room-compiler:$room_version"
|
kapt "androidx.room:room-compiler:$room_version"
|
||||||
api "androidx.room:room-runtime:$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 {
|
dependencies {
|
||||||
def moshi_version = "1.9.3"
|
|
||||||
api "androidx.room:room-runtime:$room_version"
|
api "androidx.room:room-runtime:$room_version"
|
||||||
kapt "com.squareup.moshi:moshi-kotlin-codegen:$moshi_version"
|
kapt "com.squareup.moshi:moshi-kotlin-codegen:$moshi_version"
|
||||||
implementation "com.squareup.moshi:moshi:$moshi_version"
|
implementation "com.squareup.moshi:moshi:$moshi_version"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue