Files
HealthLog/prisma/migrations/0363_user_sync_reset_at/migration.sql
T
Marc-André Bombeck eda87fd4a7 fix(sync): expire delta cursors issued before a restore or a data wipe
A restore writes rows back with their original updatedAt, behind every
paired client's watermarks, and removes rows without leaving tombstones.
A client that kept its cursor would miss both on its next incremental
pull. The same holds after the person deletes all their data.

`users.sync_reset_at` (migration 0363) records when the record was last
replaced: the restore stamps it as its last write and again right after
the commit, the per-account and the admin wipe stamp it inside their
transactions. Cursors now carry the time they were issued, and
/api/sync/changes answers its existing `cursorExpired` to a cursor issued
before the reset, or one without an issue time on an account that has
one. The comparison is on the issue time, because after a restore a
freshly drained cursor still carries old watermarks.
2026-09-27 13:46:38 +02:00

7 lines
443 B
SQL

-- When an account's record was last replaced wholesale (a backup restore, or
-- the person deleting all their data). `/api/sync/changes` expires every
-- delta cursor issued before it, so a paired client re-initialises instead
-- of catching up from a position the restore invalidated. Nullable: an
-- account that was never restored or wiped has no reset to honour.
ALTER TABLE "users" ADD COLUMN IF NOT EXISTS "sync_reset_at" TIMESTAMP(3);