Offline-First POS System
Dokumentasi lengkap untuk implementasi offline-first architecture di MStore Backend, memungkinkan POS client beroperasi tanpa koneksi internet dan sync otomatis saat online.๐ฏ Overview
Offline-first architecture memungkinkan:- โ 100% operasional tanpa internet untuk transaksi CASH
- โ Auto-sync background saat koneksi tersedia
- โ Conflict resolution otomatis untuk data collision
- โ Batch sync untuk efisiensi bandwidth
- โ Idempotent operations untuk retry safety
- โ Flutter + Isar DB untuk mobile client
- โ IndexedDB untuk web client
๐๏ธ Architecture Flow
๐ Database Schema
Offline Fields in transactions Table
Conflict Tracking Table
๐ก API Endpoints
1. Batch Sync
Endpoint untuk sync batch transactions, payments, dan voids dari offline client.2. Resolve Conflict
๐ฑ Flutter + Isar DB Implementation
1. Setup Dependencies
2. Define Isar Collections
3. Initialize Isar
4. Create Transaction (Offline-First)
5. Background Sync Worker
6. Conflict Resolution UI
๐งช Testing Scenarios
Scenario 1: Offline Transaction (CASH)
๐ Implementation Status
โ Backend (100% Complete)
โ Documentation (100% Complete)
๐ก Best Practices
DO โ
- Always save to local DB first before API call
- Use unique
offline_referencefor idempotency - Implement retry logic with exponential backoff
- Show sync status to users
- Handle conflicts gracefully
- Encrypt sensitive data in local DB
- Monitor sync metrics
DONโT โ
- Donโt block UI waiting for API response
- Donโt sync on every transaction (batch instead)
- Donโt ignore conflicts (must resolve)
- Donโt store unencrypted payment data
- Donโt retry infinitely (max 3-5 attempts)
- Donโt sync when battery is low
๐ Troubleshooting
Problem: Sync Queue Growing
Symptoms: Sync queue has 100+ pending items Solution:Problem: Isar Database Locked
Symptoms: โDatabase is lockedโ error Solution:๐ Related Documentation
Transaction Flow
Complete transaction flow & state machine
Payment Gateway
QRIS and payment integration
Inventory Flow
Inventory management & stock movement
Need Help? Contact backend team atau check GitHub Issues