fix: Beheben des Deserialisierungsfehlers beim Web-App-Import
- Ändert die Datentypen für `is_standard` und `marked` in der `Item`-Datenklasse von `Boolean` auf `Int`, um sie an die API-Antwort (0/1) anzupassen. - Verbessert die Importlogik, um das Hinzufügen doppelter Artikel zu verhindern.
This commit is contained in:
@@ -28,9 +28,9 @@ data class TokenResponse(
|
||||
data class Item(
|
||||
val id: Int,
|
||||
val name: String,
|
||||
val is_standard: Boolean,
|
||||
val is_standard: Int,
|
||||
val created_by_user_id: Int?,
|
||||
val marked: Boolean
|
||||
val marked: Int
|
||||
)
|
||||
|
||||
@Serializable
|
||||
@@ -55,6 +55,7 @@ class WebAppClient {
|
||||
json(Json {
|
||||
ignoreUnknownKeys = true
|
||||
prettyPrint = true
|
||||
isLenient = true
|
||||
})
|
||||
}
|
||||
expectSuccess = false // Don't throw exceptions for non-2xx responses
|
||||
|
||||
@@ -2,6 +2,7 @@ package de.lxtools.noteshop.data
|
||||
|
||||
import de.lxtools.noteshop.api.WebAppClient
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.firstOrNull
|
||||
|
||||
/**
|
||||
* Repository that provides insert, update, delete, and retrieve of data from a given data source.
|
||||
@@ -256,10 +257,18 @@ class OfflineNoteshopRepository(
|
||||
|
||||
override suspend fun importItemsFromWebApp(listId: Int, url: String, user: String, pass: String) {
|
||||
val itemsFromWeb = webAppClient.fetchItems(url, user, pass)
|
||||
val newItems = itemsFromWeb.map { itemName ->
|
||||
// Get existing items to prevent duplicates
|
||||
val existingItemNames = getShoppingListWithItemsStream(listId).firstOrNull()?.items?.map { it.name.lowercase() } ?: emptyList()
|
||||
val newItems = itemsFromWeb.filter { itemName ->
|
||||
itemName.lowercase() !in existingItemNames
|
||||
}.map { itemName ->
|
||||
ShoppingListItem(listId = listId, name = itemName)
|
||||
}
|
||||
insertShoppingListItems(newItems)
|
||||
|
||||
if (newItems.isNotEmpty()) {
|
||||
insertShoppingListItems(newItems)
|
||||
}
|
||||
// Always mark all fetched items as processed on the server
|
||||
webAppClient.markItems(url, user, pass, itemsFromWeb)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user