data: add database for lobsters posts

Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
This commit is contained in:
Harsh Shandilya 2020-09-23 16:27:41 +05:30
parent 699a475315
commit 96c25c428d
No known key found for this signature in database
GPG key ID: 366D7BBAD1031E80
6 changed files with 112 additions and 2 deletions

View file

@ -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 {

View file

@ -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"
}

View file

@ -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)
}
}

View file

@ -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()
}

View file

@ -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
}

View file

@ -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"