From e3960a389e153cf706ea142d75a91bf084d92dac Mon Sep 17 00:00:00 2001 From: eddy Date: Thu, 6 Aug 2026 04:42:47 +0200 Subject: [PATCH] refactor: syncAll pull-fase gebruikt mergeMeasurements als canonieke merge (issue #3) --- src/sync/syncService.ts | 57 +++++++++++++++-------------------------- 1 file changed, 20 insertions(+), 37 deletions(-) diff --git a/src/sync/syncService.ts b/src/sync/syncService.ts index 8b2def8..0d43951 100644 --- a/src/sync/syncService.ts +++ b/src/sync/syncService.ts @@ -112,48 +112,31 @@ export async function syncAll(): Promise { if (remote.length > 0) { const local = await getAllMeasurementsForSync() + const merged = mergeMeasurements(local, remote) + const localMap = new Map(local.map(m => [m.id, m])) - for (const r of remote) { - const localRec = localMap.get(r.id) - const isDeleted = !!(r as any).deleted - - if (isDeleted) { - if (localRec) { - if ( - localRec.syncStatus === 'pending' || - localRec.syncStatus === 'pending-delete' - ) { - continue - } - await removeMeasurement(r.id) - deleted++ - } - continue - } - - const localIsPending = - localRec?.syncStatus === 'pending' || - localRec?.syncStatus === 'pending-delete' - - if (localIsPending) { - continue - } - - if (localRec) { - if (new Date(r.updatedAt) > new Date(localRec.updatedAt)) { - const record = { ...r, deletedAt: (r as any).deletedAt || undefined } as Measurement - await upsertMeasurement(record) - await updateSyncStatus(r.id, 'synced') + for (const m of merged) { + if (m.deletedAt) { + await removeMeasurement(m.id) + const localRec = localMap.get(m.id) + if (localRec && !localRec.deletedAt) { pulled++ } - continue - } + } else { + const localRec = localMap.get(m.id) + const isNew = !localRec + const isUpdated = + localRec && + new Date(m.updatedAt).getTime() !== + new Date(localRec.updatedAt).getTime() - const record = { ...r, deletedAt: (r as any).deletedAt || undefined } as Measurement - await upsertMeasurement(record) - await updateSyncStatus(r.id, 'synced') - pulled++ + if (isNew || isUpdated) { + await upsertMeasurement(m) + await updateSyncStatus(m.id, 'synced') + pulled++ + } + } } }