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:
2025-10-30 11:07:13 +01:00
parent 16ba4f62ca
commit 8037489986
2 changed files with 14 additions and 4 deletions

View File

@@ -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

View File

@@ -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)
}