Merge pull request 'refactor: syncAll pull-fase gebruikt mergeMeasurements als canonieke merge (issue #3)' (#19) from fix/issue-3-mergeMeasurements-refactor into main

This commit is contained in:
eddy 2026-08-06 04:51:35 +02:00
commit 38137fabb4

View file

@ -112,50 +112,33 @@ export async function syncAll(): Promise<SyncResult> {
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')
if (isNew || isUpdated) {
await upsertMeasurement(m)
await updateSyncStatus(m.id, 'synced')
pulled++
}
}
}
}
await SecureStore.setItemAsync(LAST_SYNC_KEY, new Date().toISOString())