From 3bd3f2dff843e800791be6ac2ac570fc5b7d9b1a Mon Sep 17 00:00:00 2001 From: Aditya Wasan Date: Sun, 18 Oct 2020 12:19:21 +0530 Subject: [PATCH] Add saved entity and dao Signed-off-by: Aditya Wasan --- .../data/model/SavedLobstersEntity.kt | 14 +++++++ .../lobsters/data/source/SavedPostsDao.kt | 40 +++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 data/src/main/java/dev/msfjarvis/lobsters/data/model/SavedLobstersEntity.kt create mode 100644 data/src/main/java/dev/msfjarvis/lobsters/data/source/SavedPostsDao.kt diff --git a/data/src/main/java/dev/msfjarvis/lobsters/data/model/SavedLobstersEntity.kt b/data/src/main/java/dev/msfjarvis/lobsters/data/model/SavedLobstersEntity.kt new file mode 100644 index 00000000..909cb6f3 --- /dev/null +++ b/data/src/main/java/dev/msfjarvis/lobsters/data/model/SavedLobstersEntity.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_saved_posts", + primaryKeys = ["shortId"], +) +data class SavedLobstersEntity( + @Embedded + val post: LobstersPost +) diff --git a/data/src/main/java/dev/msfjarvis/lobsters/data/source/SavedPostsDao.kt b/data/src/main/java/dev/msfjarvis/lobsters/data/source/SavedPostsDao.kt new file mode 100644 index 00000000..3fbc9ecf --- /dev/null +++ b/data/src/main/java/dev/msfjarvis/lobsters/data/source/SavedPostsDao.kt @@ -0,0 +1,40 @@ +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.LobstersEntity +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> + + @Transaction + open suspend fun insertPosts(vararg posts: LobstersPost) { + insertPosts(posts.map { SavedLobstersEntity(it) }) + } + + @Insert(onConflict = OnConflictStrategy.IGNORE) + protected abstract suspend fun insertPosts(posts: List) + + @Transaction + open suspend fun deletePosts(vararg posts: LobstersPost) { + deletePosts(posts.map { SavedLobstersEntity(it) }) + } + + @Delete + protected abstract suspend fun deletePosts(posts: List) + + @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) +}