From aa7a732cce1d9bf8eead72bb915fd7a63a80a283 Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Sun, 27 Sep 2020 10:28:22 +0530 Subject: [PATCH] data: wrap LobstersPost into an intermediate entity This lets us keep the same database structure without needing to leak Room-specific properties into our model Signed-off-by: Harsh Shandilya --- .../lobsters/data/model/LobstersEntity.kt | 14 ++++++++++++++ .../msfjarvis/lobsters/data/source/PostsDao.kt | 16 ++++++++++++++-- .../lobsters/data/source/PostsDatabase.kt | 3 ++- 3 files changed, 30 insertions(+), 3 deletions(-) create mode 100644 data/src/main/java/dev/msfjarvis/lobsters/data/model/LobstersEntity.kt diff --git a/data/src/main/java/dev/msfjarvis/lobsters/data/model/LobstersEntity.kt b/data/src/main/java/dev/msfjarvis/lobsters/data/model/LobstersEntity.kt new file mode 100644 index 00000000..c7f1a11f --- /dev/null +++ b/data/src/main/java/dev/msfjarvis/lobsters/data/model/LobstersEntity.kt @@ -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 +) diff --git a/data/src/main/java/dev/msfjarvis/lobsters/data/source/PostsDao.kt b/data/src/main/java/dev/msfjarvis/lobsters/data/source/PostsDao.kt index 9247ebe2..6de53a3e 100644 --- a/data/src/main/java/dev/msfjarvis/lobsters/data/source/PostsDao.kt +++ b/data/src/main/java/dev/msfjarvis/lobsters/data/source/PostsDao.kt @@ -4,6 +4,8 @@ import androidx.room.Dao import androidx.room.Delete import androidx.room.Insert import androidx.room.Query +import androidx.room.Transaction +import dev.msfjarvis.lobsters.data.model.LobstersEntity import dev.msfjarvis.lobsters.model.LobstersPost import kotlinx.coroutines.flow.Flow @@ -12,11 +14,21 @@ abstract class PostsDao { @Query("SELECT * FROM lobsters_posts") abstract fun loadPosts(): Flow> + @Transaction + open suspend fun insertPosts(vararg posts: LobstersPost) { + insertPosts(posts.map { LobstersEntity(it) }) + } + @Insert - abstract suspend fun insertPosts(vararg posts: LobstersPost) + protected abstract suspend fun insertPosts(posts: List) + + @Transaction + open suspend fun deletePosts(vararg posts: LobstersPost) { + deletePosts(posts.map { LobstersEntity(it) }) + } @Delete - abstract suspend fun deletePosts(vararg posts: LobstersPost) + protected abstract suspend fun deletePosts(posts: List) @Query("DELETE FROM lobsters_posts") abstract suspend fun deleteAllPosts() diff --git a/data/src/main/java/dev/msfjarvis/lobsters/data/source/PostsDatabase.kt b/data/src/main/java/dev/msfjarvis/lobsters/data/source/PostsDatabase.kt index 0640e663..cfe896a3 100644 --- a/data/src/main/java/dev/msfjarvis/lobsters/data/source/PostsDatabase.kt +++ b/data/src/main/java/dev/msfjarvis/lobsters/data/source/PostsDatabase.kt @@ -3,11 +3,12 @@ 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.model.LobstersPost @Database( entities = [ - LobstersPost::class, + LobstersEntity::class, ], version = 1, exportSchema = false,