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)
| Component | Status |
|---|---|
| Service Layer | β Complete |
| Repository Layer | β Complete |
| Handler Layer | β Complete |
| Database Models | β Complete |
| Database Migration | β Complete |
β Documentation (100% Complete)
| Document | Status |
|---|---|
| Architecture Guide | β Complete |
| Implementation Summary | β Complete |
| Flutter + Isar Guide | β Complete |
| REST Client Examples | β 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