feat: detect duplicate measurement dates, ask to overwrite

This commit is contained in:
Eddy de Vink 2026-06-28 00:39:56 +02:00
commit 1f43918e84
2 changed files with 36 additions and 2 deletions

View file

@ -47,6 +47,15 @@ export async function getLatestMeasurement(): Promise<Measurement | null> {
return rows.length > 0 ? (rows[0] as Measurement) : null
}
export async function getMeasurementByDate(date: string): Promise<Measurement | null> {
const day = date.slice(0, 10)
const rows = await db!.getAllAsync<any>(
"SELECT * FROM measurements WHERE measuredAt LIKE ? LIMIT 1",
[`${day}%`]
)
return rows.length > 0 ? (rows[0] as Measurement) : null
}
export async function updateMeasurement(id: string, syncStatus: SyncStatus): Promise<void> {
await db!.runAsync(
'UPDATE measurements SET syncStatus = ?, updatedAt = ? WHERE id = ?',

View file

@ -3,7 +3,7 @@ import { View, Text, Alert } from 'react-native'
import { useFocusEffect } from '@react-navigation/native'
import MeasurementForm from '../components/MeasurementForm'
import { Measurement } from '../types'
import { initDatabase, insertMeasurement, getLatestMeasurement } from '../database/db'
import { initDatabase, insertMeasurement, getLatestMeasurement, getMeasurementByDate, upsertMeasurement } from '../database/db'
type Props = {
navigation: any
@ -29,7 +29,32 @@ export default function NewMeasurementScreen({ navigation }: Props) {
const handleSubmit = async (m: Measurement) => {
await initDatabase()
await insertMeasurement(m)
const existing = await getMeasurementByDate(m.measuredAt)
if (existing) {
Alert.alert(
'Dubbele datum',
`Er bestaat al een meting van ${new Date(m.measuredAt).toLocaleDateString('nl-NL')}. Overschrijven?`,
[
{ text: 'Annuleren', style: 'cancel' },
{
text: 'Overschrijven',
style: 'destructive',
onPress: () => doSave(m, existing.id),
},
]
)
return
}
doSave(m)
}
const doSave = async (m: Measurement, existingId?: string) => {
if (existingId) {
m.id = existingId
await upsertMeasurement(m)
} else {
await insertMeasurement(m)
}
try {
const { syncAll } = await import('../sync/syncService')
await syncAll()