From 8b20a0b0be9793cfddb39a2deb205ed7423bff03 Mon Sep 17 00:00:00 2001 From: Satindar Dhillon Date: Wed, 11 Jan 2023 12:40:19 -0800 Subject: [PATCH] add cross ref table for saved item and saved item labels --- .../omnivore/persistence/AppDatabase.kt | 6 +++- .../persistence/entities/SavedItem.kt | 4 +++ .../persistence/entities/SavedItemLabel.kt | 29 +++++++++++++++++-- 3 files changed, 36 insertions(+), 3 deletions(-) diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/persistence/AppDatabase.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/persistence/AppDatabase.kt index f78470795..6062c45a2 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/persistence/AppDatabase.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/persistence/AppDatabase.kt @@ -3,6 +3,8 @@ package app.omnivore.omnivore.persistence import androidx.room.Database import androidx.room.RoomDatabase import app.omnivore.omnivore.persistence.entities.SavedItem +import app.omnivore.omnivore.persistence.entities.SavedItemLabel +import app.omnivore.omnivore.persistence.entities.SavedItemAndSavedItemLabelCrossRef import app.omnivore.omnivore.persistence.entities.SavedItemDao import app.omnivore.omnivore.persistence.entities.Viewer import app.omnivore.omnivore.persistence.entities.ViewerDao @@ -10,7 +12,9 @@ import app.omnivore.omnivore.persistence.entities.ViewerDao @Database( entities = [ Viewer::class, - SavedItem::class + SavedItem::class, + SavedItemLabel::class, + SavedItemAndSavedItemLabelCrossRef::class ], version = 2 ) diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/persistence/entities/SavedItem.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/persistence/entities/SavedItem.kt index e664df0b1..33c37d2c1 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/persistence/entities/SavedItem.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/persistence/entities/SavedItem.kt @@ -97,4 +97,8 @@ interface SavedItemDao { @Query("DELETE FROM savedItem WHERE savedItemId = :itemID") fun deleteById(itemID: String) + + @Transaction + @Query("SELECT savedItemId, slug, publisherURLString, title, author, imageURLString, isArchived, pageURLString, contentReader FROM SavedItem ORDER BY savedAt DESC") + fun getLibraryLiveDataWithLabels(): LiveData> } diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/persistence/entities/SavedItemLabel.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/persistence/entities/SavedItemLabel.kt index 3cbdb87f8..6979aeb90 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/persistence/entities/SavedItemLabel.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/persistence/entities/SavedItemLabel.kt @@ -1,7 +1,6 @@ package app.omnivore.omnivore.persistence.entities -import androidx.room.Entity -import androidx.room.PrimaryKey +import androidx.room.* @Entity data class SavedItemLabel( @@ -13,5 +12,31 @@ data class SavedItemLabel( val serverSyncStatus: Int = 0 ) +@Entity(primaryKeys = ["savedItemLabelId", "savedItemId"]) +data class SavedItemAndSavedItemLabelCrossRef( + val savedItemLabelId: String, + val savedItemId: String +) + +data class SavedItemWithLabels( + @Embedded val savedItem: SavedItem, + @Relation( + parentColumn = "savedItemId", + entityColumn = "savedItemLabelId", + associateBy = Junction(SavedItemAndSavedItemLabelCrossRef::class) + ) + val labels: List +) + +data class SavedItemCardDataWithLabels( + @Embedded val cardData: SavedItemCardData, + @Relation( + parentColumn = "savedItemId", + entityColumn = "savedItemLabelId", + associateBy = Junction(SavedItemAndSavedItemLabelCrossRef::class) + ) + val labels: List +) + // has many highlights // has many savedItems