Skip to main content

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.
Response:

2. Resolve Conflict

Response:

๐Ÿ“ฑ 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_reference for 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:

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