Skip to content

Commit d364ebd

Browse files
authored
Saving document links on Room Database (#473)
1 parent 9037f25 commit d364ebd

File tree

5 files changed

+21
-8
lines changed

5 files changed

+21
-8
lines changed

application/core/persistence_room/src/commonMain/kotlin/io/writeopia/persistence/room/WriteopiaAplicationDatabase.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ expect object AppDatabaseConstructor : RoomDatabaseConstructor<WriteopiaApplicat
3737
UserEntity::class,
3838
TokenEntity::class
3939
],
40-
version = 22,
40+
version = 23,
4141
exportSchema = false
4242
)
4343
@TypeConverters(IdListConverter::class)

plugins/writeopia_persistence_room/src/commonMain/kotlin/io/writeopia/sdk/persistence/dao/DocumentEntityDao.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,4 +128,7 @@ interface DocumentEntityDao {
128128

129129
@Query("UPDATE $DOCUMENT_ENTITY set user_id = :newUserId WHERE user_id = :oldUserId")
130130
suspend fun moveDocumentsToNewUser(oldUserId: String, newUserId: String)
131+
132+
@Query("SELECT title FROM $DOCUMENT_ENTITY WHERE $DOCUMENT_ENTITY.id = :documentId")
133+
suspend fun getDocumentTitleById(documentId: String): String?
131134
}

plugins/writeopia_persistence_room/src/commonMain/kotlin/io/writeopia/sdk/persistence/dao/room/RoomDocumentRepository.kt

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package io.writeopia.sdk.persistence.dao.room
33
import io.writeopia.sdk.model.document.DocumentInfo
44
import io.writeopia.sdk.model.document.info
55
import io.writeopia.sdk.models.document.Document
6+
import io.writeopia.sdk.models.link.DocumentLink
67
import io.writeopia.sdk.models.story.StoryStep
78
import io.writeopia.sdk.search.DocumentSearch
89
import io.writeopia.sdk.repository.DocumentRepository
@@ -168,13 +169,17 @@ class RoomDocumentRepository(
168169
storyEntities.filter { entity -> entity.parentId == null }
169170
.associateBy { entity -> entity.position }
170171
.mapValues { (_, entity) ->
172+
if (entity.linkToDocument != null) {
173+
val title = documentEntityDao.getDocumentTitleById(entity.linkToDocument)
174+
return@mapValues entity.toModel(documentLink = DocumentLink(entity.linkToDocument, title))
175+
}
176+
171177
if (entity.hasInnerSteps) {
172178
val innerSteps = storyUnitEntityDao?.queryInnerSteps(entity.id) ?: emptyList()
173-
174-
entity.toModel(innerSteps)
175-
} else {
176-
entity.toModel()
179+
return@mapValues entity.toModel(innerSteps)
177180
}
181+
182+
entity.toModel()
178183
}
179184

180185
private suspend fun setFavorite(ids: Set<String>, isFavorite: Boolean) {

plugins/writeopia_persistence_room/src/commonMain/kotlin/io/writeopia/sdk/persistence/entity/story/StoryStepEntity.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,5 @@ data class StoryStepEntity(
2323
@ColumnInfo(name = "background_color") val backgroundColor: Int?,
2424
@ColumnInfo(name = "tags") val tags: String,
2525
@ColumnInfo(name = "spans") val spans: String,
26+
@ColumnInfo(name = "link_to_document") val linkToDocument: String? = null
2627
)

plugins/writeopia_persistence_room/src/commonMain/kotlin/io/writeopia/sdk/persistence/parse/StoryUnitParse.kt

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.writeopia.sdk.persistence.parse
22

3+
import io.writeopia.sdk.models.link.DocumentLink
34
import io.writeopia.sdk.models.span.SpanInfo
45
import io.writeopia.sdk.models.story.Decoration
56
import io.writeopia.sdk.models.story.StoryStep
@@ -23,7 +24,8 @@ fun StoryStepEntity.toModel(
2324
steps: List<StoryStepEntity> = emptyList(),
2425
nameToType: (String) -> StoryType = { typeName ->
2526
StoryTypes.fromName(typeName).type
26-
}
27+
},
28+
documentLink: DocumentLink? = null,
2729
): StoryStep =
2830
StoryStep(
2931
id = id,
@@ -47,7 +49,8 @@ fun StoryStepEntity.toModel(
4749
.split(",")
4850
.filter { it.isNotEmpty() }
4951
.map(SpanInfo::fromString)
50-
.toSet()
52+
.toSet(),
53+
documentLink = documentLink
5154
)
5255

5356
fun StoryStep.toEntity(position: Int, documentId: String): StoryStepEntity =
@@ -66,5 +69,6 @@ fun StoryStep.toEntity(position: Int, documentId: String): StoryStepEntity =
6669
hasInnerSteps = this.steps.isNotEmpty(),
6770
backgroundColor = this.decoration.backgroundColor,
6871
tags = this.tags.joinToString(separator = ",") { it.tag.label },
69-
spans = this.spans.joinToString(separator = ",") { it.toText() }
72+
spans = this.spans.joinToString(separator = ",") { it.toText() },
73+
linkToDocument = documentLink?.id
7074
)

0 commit comments

Comments
 (0)