Server + Client: Timestamp-basierter Delta-Sync als Alternative zum Full-Sync. GET /api/inventory akzeptiert jetzt optionalen ?since=<ts> Query-Parameter und liefert nur Items mit lastUpdated > since. Shared: InventoryDto um deletedItemIds-Feld erweitert (Default: leer, backward-compatible mit bestehenden Clients). Server: - DeletedItems-Tabelle trackt geloeschte Item-IDs pro Inventory - InventoryRepository.loadInventorySince(): Delta-Query mit Items + deletedItemIds seit Timestamp - saveInventory()/deleteItem(): Loeschungen werden in DeletedItems protokolliert - DatabaseFactory: DeletedItems-Tabelle registriert Client (App): - SyncService.downloadInventory(since: Long?): optionaler since-Param - SyncServiceImpl: haengt ?since= an GET-Request - ItemDao.deleteByIds(): Batch-Loeschung fuer Delta-Sync - ImportExportRepositoryImpl: verarbeitet deletedItemIds aus DTO - SettingsViewModel.pullSync(fullSync): Delta-Sync mit letztem Sync-Timestamp; fullSyncRequired-Event loest weiterhin Full-Sync aus Entscheidungen: - Timestamp-basiert (nutzt bestehendes lastUpdated-Feld) - Full-Sync bleibt Fallback (fullSyncRequired, erster Sync) - Categories/Locations/Settings immer vollstaendig (klein) 6 neue DeltaSyncTests + 3 Repository-Tests + 2 SyncService-Tests Closes #74 |
||
|---|---|---|
| .. | ||
| src/main/kotlin/de/krisenvorrat/shared/model | ||
| build.gradle.kts | ||