Optimistic Lock Version Check

Implement optimistic locking with a version column, returning a typed conflict result when concurrent writers collide.

TypescriptData Integrity

Code

snippet
export interface Record { id: string; value: string; version: number; }
export type UpdateResult = { ok: true; record: Record } | { ok: false; conflict: true; current: Record };

export async function updateWithVersion(
  store: { load(id: string): Promise<Record | undefined>; save(record: Record, expectedVersion: number): Promise<boolean> },
  id: string,
  mutate: (value: string) => string,
): Promise<UpdateResult> {
  const current = await store.load(id);
  if (!current) throw new Error('record not found: ' + id);
  const next: Record = { id, value: mutate(current.value), version: current.version + 1 };
  const saved = await store.save(next, current.version);
  if (!saved) {
    const fresh = await store.load(id);
    if (!fresh) throw new Error('record vanished during update: ' + id);
    return { ok: false, conflict: true, current: fresh };
  }
  return { ok: true, record: next };
}