- setDeletedAt update nu ook updatedAt (bug 2) - getAllMeasurements filtert deletedAt IS NULL, nieuwe getAllMeasurementsForSync voor sync - mergeMeasurements detecteert server deleted:true → deletedAt (bug 1) - syncAll: pull-push split met remoteUpdatedMap, geen double-push (bug 3) - hard delete alleen na API-succes (bug 4) - DashboardScreen: refreshCache() na syncAll zodat UI niet op Laden blijft hangen - deleteMeasurement() dead code verwijderd (bug 5) - tests: 3 nieuwe testcases voor deleted → deletedAt mapping, 15/15 pass
59 lines
1.8 KiB
TypeScript
59 lines
1.8 KiB
TypeScript
import { Measurement } from '../types'
|
|
import { initDatabase, getAllMeasurements, getLatestMeasurements, getMeasurementsSince } from '../database/db'
|
|
|
|
let cachedMeasurements: Measurement[] = []
|
|
let initialized = false
|
|
|
|
export async function loadFromDb(): Promise<Measurement[]> {
|
|
await initDatabase()
|
|
cachedMeasurements = await getAllMeasurements()
|
|
initialized = true
|
|
return cachedMeasurements
|
|
}
|
|
|
|
export async function loadLatest(count: number): Promise<Measurement[]> {
|
|
await initDatabase()
|
|
const latest = await getLatestMeasurements(count)
|
|
cachedMeasurements = latest
|
|
initialized = true
|
|
return latest
|
|
}
|
|
|
|
export async function loadSince(date: string): Promise<Measurement[]> {
|
|
await initDatabase()
|
|
const since = await getMeasurementsSince(date)
|
|
// Merge with existing cache (keep newer measurements)
|
|
const existingIds = new Set(cachedMeasurements.map(m => m.id))
|
|
const newOnes = since.filter(m => !existingIds.has(m.id))
|
|
cachedMeasurements = [...cachedMeasurements, ...newOnes]
|
|
cachedMeasurements.sort((a, b) => new Date(b.measuredAt).getTime() - new Date(a.measuredAt).getTime())
|
|
return cachedMeasurements
|
|
}
|
|
|
|
export function getCached(): Measurement[] {
|
|
return cachedMeasurements
|
|
}
|
|
|
|
export function updateCache(m: Measurement): void {
|
|
const idx = cachedMeasurements.findIndex(x => x.id === m.id)
|
|
if (idx >= 0) {
|
|
cachedMeasurements[idx] = m
|
|
} else {
|
|
cachedMeasurements.unshift(m)
|
|
}
|
|
// Re-sort by measuredAt descending
|
|
cachedMeasurements.sort((a, b) => new Date(b.measuredAt).getTime() - new Date(a.measuredAt).getTime())
|
|
}
|
|
|
|
export function removeFromCache(id: string): void {
|
|
cachedMeasurements = cachedMeasurements.filter(m => m.id !== id)
|
|
}
|
|
|
|
export async function refreshCache(): Promise<Measurement[]> {
|
|
await loadFromDb()
|
|
return cachedMeasurements
|
|
}
|
|
|
|
export function isInitialized(): boolean {
|
|
return initialized
|
|
}
|