Lewati ke konten

Offline-first dengan IndexedDB: pelajaran dari Canaya POS

Antrean sinkronisasi, konflik data, dan kenapa kami berhenti memakai timestamp perangkat untuk menentukan urutan transaksi.

Tim Canaya 1 menit baca Canaya POS

Kasir di warung tidak bisa menunggu sinyal. Saat Canaya POS masih bergantung pada request langsung ke server, setiap gangguan jaringan berarti antrean pembeli yang berhenti. Jadi kami pindahkan sumber kebenaran sementara ke perangkat.

Artikel ini merangkum tiga keputusan yang paling berpengaruh, lengkap dengan kode yang sekarang jalan di produksi.

1. Semua perubahan lewat outbox

Setiap transaksi ditulis dulu ke tabel outbox di IndexedDB, dalam transaksi yang sama dengan perubahan stok lokal. Worker terpisah mengirim isi outbox saat online.

src/lib/sync/outbox.ts
// tulis transaksi + antrean secara atomik
export async function catatPenjualan(sale) {
	const tx = db.transaction(['sales', 'outbox'], 'readwrite');
	await tx.objectStore('sales').add(sale);
	await tx.objectStore('outbox').add({
		id: crypto.randomUUID(),
		op: 'sale.create',
		seq: await nextSeq(),
		payload: sale
	});
	await tx.done;
}

2. Urutan dari sequence, bukan jam perangkat

Jam di HP kasir bisa salah beberapa menit, kadang beberapa hari. Kami ganti timestamp dengan nomor urut per perangkat, dan server menolak nomor yang sudah pernah diterima.

3. Konflik diselesaikan per jenis data

Tidak ada satu aturan untuk semua. Yang kami pakai:

  • Penjualan — append-only, tidak pernah bentrok.
  • Stok — disimpan sebagai mutasi, totalnya dihitung ulang di server.
  • Harga produk — server menang; klien diberi tahu saat sinkron.

“Offline-first bukan fitur tambahan. Ia mengubah siapa yang memegang kebenaran, dan kapan.”

Pola yang sama sekarang dipakai di Canaya Wallet untuk Dompet Bersama. Di artikel berikutnya kami bahas cara mengujinya dengan jaringan yang sengaja dibuat putus-sambung.

  • offline-first
  • indexeddb
  • sinkronisasi

Sistemmu punya masalah serupa?

Kami bantu audit dan rancang ulang alurnya untuk sistem kamu.

Ajukan konsultasi

Artikel terkait