From 79c91eb5374cc7d0927dbe6476a9f7dabe3864b8 Mon Sep 17 00:00:00 2001 From: eddy Date: Mon, 20 Jul 2026 16:58:12 +0200 Subject: [PATCH] db: voeg deletedAt toe, vervang syncStatus logica door timestamp-based functies --- src/database/db.ts | 50 ++++++++++++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/src/database/db.ts b/src/database/db.ts index 77b8fe9..f3d8d81 100644 --- a/src/database/db.ts +++ b/src/database/db.ts @@ -1,5 +1,5 @@ import * as SQLite from 'expo-sqlite' -import { Measurement, SyncStatus } from '../types' +import { Measurement } from '../types' let db: SQLite.SQLiteDatabase | null = null @@ -20,16 +20,17 @@ export async function initDatabase(): Promise { measuredAt TEXT NOT NULL, createdAt TEXT NOT NULL, updatedAt TEXT NOT NULL, - syncStatus TEXT NOT NULL DEFAULT 'local' + syncStatus TEXT NOT NULL DEFAULT 'local', + deletedAt TEXT ); `) } export async function insertMeasurement(m: Measurement): Promise { await db!.runAsync( - `INSERT INTO measurements (id, weight, bmi, bodyFatPercentage, fatMass, musclePercentage, muscleMass, visceralFat, bmr, measuredAt, createdAt, updatedAt, syncStatus) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, - [m.id, m.weight, m.bmi, m.bodyFatPercentage, m.fatMass, m.musclePercentage, m.muscleMass, m.visceralFat, m.bmr, m.measuredAt, m.createdAt, m.updatedAt, m.syncStatus] + `INSERT INTO measurements (id, weight, bmi, bodyFatPercentage, fatMass, musclePercentage, muscleMass, visceralFat, bmr, measuredAt, createdAt, updatedAt, syncStatus, deletedAt) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, + [m.id, m.weight, m.bmi, m.bodyFatPercentage, m.fatMass, m.musclePercentage, m.muscleMass, m.visceralFat, m.bmr, m.measuredAt, m.createdAt, m.updatedAt, m.syncStatus, m.deletedAt ?? null] ) } @@ -56,28 +57,33 @@ export async function getMeasurementByDate(date: string): Promise 0 ? (rows[0] as Measurement) : null } -export async function updateMeasurement(id: string, syncStatus: SyncStatus): Promise { - await db!.runAsync( - 'UPDATE measurements SET syncStatus = ?, updatedAt = ? WHERE id = ?', - [syncStatus, new Date().toISOString(), id] - ) -} - export async function upsertMeasurement(m: Measurement): Promise { await db!.runAsync( - `INSERT OR REPLACE INTO measurements (id, weight, bmi, bodyFatPercentage, fatMass, musclePercentage, muscleMass, visceralFat, bmr, measuredAt, createdAt, updatedAt, syncStatus) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, - [m.id, m.weight, m.bmi, m.bodyFatPercentage, m.fatMass, m.musclePercentage, m.muscleMass, m.visceralFat, m.bmr, m.measuredAt, m.createdAt, m.updatedAt, m.syncStatus] + `INSERT OR REPLACE INTO measurements (id, weight, bmi, bodyFatPercentage, fatMass, musclePercentage, muscleMass, visceralFat, bmr, measuredAt, createdAt, updatedAt, syncStatus, deletedAt) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, + [m.id, m.weight, m.bmi, m.bodyFatPercentage, m.fatMass, m.musclePercentage, m.muscleMass, m.visceralFat, m.bmr, m.measuredAt, m.createdAt, m.updatedAt, m.syncStatus, m.deletedAt ?? null] ) } -export async function getUnsyncedMeasurements(): Promise { - const rows = await db!.getAllAsync( - "SELECT * FROM measurements WHERE syncStatus = 'local' ORDER BY updatedAt ASC" - ) - return rows as Measurement[] -} - export async function deleteMeasurement(id: string): Promise { await db!.runAsync('DELETE FROM measurements WHERE id = ?', [id]) } + +export async function getMeasurementsUpdatedSince(since: string): Promise { + const rows = await db!.getAllAsync( + 'SELECT * FROM measurements WHERE updatedAt > ? ORDER BY updatedAt ASC', + [since] + ) + return rows as Measurement[] +} + +export async function setDeletedAt(id: string): Promise { + await db!.runAsync( + 'UPDATE measurements SET deletedAt = ? WHERE id = ?', + [new Date().toISOString(), id] + ) +} + +export async function removeMeasurement(id: string): Promise { + await db!.runAsync('DELETE FROM measurements WHERE id = ?', [id]) +}