mirror of
https://github.com/msfjarvis/compose-lobsters
synced 2025-08-17 20:17:02 +05:30
data: move into app module
Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
This commit is contained in:
parent
713706caff
commit
c3cead5993
12 changed files with 4 additions and 18 deletions
|
@ -62,7 +62,7 @@ dependencies {
|
|||
|
||||
kapt "com.google.dagger:hilt-compiler:$hilt_dagger_version"
|
||||
kapt "androidx.hilt:hilt-compiler:$hilt_androidx_version"
|
||||
implementation(project(":data"))
|
||||
kapt "androidx.room:room-compiler:$room_version"
|
||||
implementation(project(":lobsters-api"))
|
||||
implementation(project(":model"))
|
||||
implementation "androidx.core:core-ktx:$core_version"
|
||||
|
@ -83,9 +83,12 @@ dependencies {
|
|||
implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version"
|
||||
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
|
||||
implementation "androidx.navigation:navigation-compose:$nav_compose_version"
|
||||
implementation "androidx.room:room-runtime:$room_version"
|
||||
implementation "androidx.room:room-ktx:$room_version"
|
||||
implementation "androidx.ui:ui-tooling:$compose_version"
|
||||
implementation "com.google.android.material:material:$material_version"
|
||||
implementation "com.google.dagger:hilt-android:$hilt_dagger_version"
|
||||
implementation "com.squareup.moshi:moshi:$moshi_version"
|
||||
implementation "dev.chrisbanes.accompanist:accompanist-coil:$accompanist_version"
|
||||
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutines_version"
|
||||
implementation "saschpe.android:customtabs:$customtabs_version"
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
package dev.msfjarvis.lobsters.data.model
|
||||
|
||||
import androidx.room.Embedded
|
||||
import androidx.room.Entity
|
||||
import dev.msfjarvis.lobsters.model.LobstersPost
|
||||
|
||||
@Entity(
|
||||
tableName = "lobsters_posts",
|
||||
primaryKeys = ["shortId"],
|
||||
)
|
||||
data class LobstersEntity(
|
||||
@Embedded
|
||||
val post: LobstersPost
|
||||
)
|
|
@ -0,0 +1,14 @@
|
|||
package dev.msfjarvis.lobsters.data.model
|
||||
|
||||
import androidx.room.Embedded
|
||||
import androidx.room.Entity
|
||||
import dev.msfjarvis.lobsters.model.LobstersPost
|
||||
|
||||
@Entity(
|
||||
tableName = "lobsters_saved_posts",
|
||||
primaryKeys = ["shortId"],
|
||||
)
|
||||
data class SavedLobstersEntity(
|
||||
@Embedded
|
||||
val post: LobstersPost
|
||||
)
|
|
@ -0,0 +1,35 @@
|
|||
package dev.msfjarvis.lobsters.data.source
|
||||
|
||||
import androidx.room.TypeConverter
|
||||
import com.squareup.moshi.Moshi
|
||||
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 toTagList(value: String?): List<String>? {
|
||||
return value?.split(SEPARATOR)
|
||||
}
|
||||
|
||||
@TypeConverter
|
||||
@JvmStatic
|
||||
fun fromTagList(value: List<String>?): String? {
|
||||
return value?.joinToString(SEPARATOR)
|
||||
}
|
||||
}
|
|
@ -0,0 +1,46 @@
|
|||
package dev.msfjarvis.lobsters.data.source
|
||||
|
||||
import androidx.room.Dao
|
||||
import androidx.room.Delete
|
||||
import androidx.room.Insert
|
||||
import androidx.room.OnConflictStrategy
|
||||
import androidx.room.Query
|
||||
import androidx.room.Transaction
|
||||
import androidx.room.Update
|
||||
import dev.msfjarvis.lobsters.data.model.LobstersEntity
|
||||
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>>
|
||||
|
||||
@Update
|
||||
suspend fun updatePost(vararg posts: LobstersPost) {
|
||||
updatePosts(posts.map { LobstersEntity(it) })
|
||||
}
|
||||
|
||||
@Update(onConflict = OnConflictStrategy.IGNORE)
|
||||
protected abstract suspend fun updatePosts(posts: List<LobstersEntity>)
|
||||
|
||||
|
||||
@Transaction
|
||||
open suspend fun insertPosts(vararg posts: LobstersPost) {
|
||||
insertPosts(posts.map { LobstersEntity(it) })
|
||||
}
|
||||
|
||||
@Insert(onConflict = OnConflictStrategy.IGNORE)
|
||||
protected abstract suspend fun insertPosts(posts: List<LobstersEntity>)
|
||||
|
||||
@Transaction
|
||||
open suspend fun deletePosts(vararg posts: LobstersPost) {
|
||||
deletePosts(posts.map { LobstersEntity(it) })
|
||||
}
|
||||
|
||||
@Delete
|
||||
protected abstract suspend fun deletePosts(posts: List<LobstersEntity>)
|
||||
|
||||
@Query("DELETE FROM lobsters_posts")
|
||||
abstract suspend fun deleteAllPosts()
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
package dev.msfjarvis.lobsters.data.source
|
||||
|
||||
import androidx.room.Database
|
||||
import androidx.room.RoomDatabase
|
||||
import androidx.room.TypeConverters
|
||||
import dev.msfjarvis.lobsters.data.model.LobstersEntity
|
||||
import dev.msfjarvis.lobsters.data.model.SavedLobstersEntity
|
||||
|
||||
@Database(
|
||||
entities = [
|
||||
LobstersEntity::class,
|
||||
SavedLobstersEntity::class
|
||||
],
|
||||
version = 2,
|
||||
exportSchema = false,
|
||||
)
|
||||
@TypeConverters(
|
||||
LobstersApiTypeConverters::class,
|
||||
)
|
||||
abstract class PostsDatabase : RoomDatabase() {
|
||||
abstract fun postsDao(): PostsDao
|
||||
abstract fun savedPostsDao(): SavedPostsDao
|
||||
}
|
|
@ -0,0 +1,42 @@
|
|||
package dev.msfjarvis.lobsters.data.source
|
||||
|
||||
import androidx.room.Dao
|
||||
import androidx.room.Delete
|
||||
import androidx.room.Insert
|
||||
import androidx.room.OnConflictStrategy
|
||||
import androidx.room.Query
|
||||
import androidx.room.Transaction
|
||||
import dev.msfjarvis.lobsters.data.model.SavedLobstersEntity
|
||||
import dev.msfjarvis.lobsters.model.LobstersPost
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
||||
@Dao
|
||||
abstract class SavedPostsDao {
|
||||
@Query("SELECT * FROM lobsters_saved_posts")
|
||||
abstract fun loadPosts(): Flow<List<LobstersPost>>
|
||||
|
||||
@Transaction
|
||||
open suspend fun insertPosts(vararg posts: LobstersPost) {
|
||||
insertPosts(posts.map { SavedLobstersEntity(it) })
|
||||
}
|
||||
|
||||
@Insert(onConflict = OnConflictStrategy.IGNORE)
|
||||
protected abstract suspend fun insertPosts(posts: List<SavedLobstersEntity>)
|
||||
|
||||
@Transaction
|
||||
open suspend fun deletePosts(vararg posts: LobstersPost) {
|
||||
deletePosts(posts.map { SavedLobstersEntity(it) })
|
||||
}
|
||||
|
||||
@Delete
|
||||
protected abstract suspend fun deletePosts(posts: List<SavedLobstersEntity>)
|
||||
|
||||
@Query("DELETE FROM lobsters_saved_posts")
|
||||
abstract suspend fun deleteAllPosts()
|
||||
|
||||
@Query("DELETE FROM lobsters_saved_posts WHERE shortId LIKE :shortId")
|
||||
abstract suspend fun deletePostById(shortId: String)
|
||||
|
||||
@Query("SELECT EXISTS(SELECT 1 FROM lobsters_saved_posts WHERE shortId LIKE :shortId)")
|
||||
abstract suspend fun isLiked(shortId: String): Boolean
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue