Skip to main content

📋 Overview

Dokumentasi ini menjelaskan implementasi lengkap fitur offline-first untuk transaksi POS di MStore Mobile menggunakan Isar database dan batch sync ke backend.

🎯 Fitur Utama

Offline Transaction

Simpan transaksi lokal saat offline menggunakan Isar

Auto Batch Sync

Sinkronisasi otomatis saat koneksi kembali online

Conflict Detection

Deteksi duplikasi menggunakan offline_reference

Sync Status Tracking

Tracking status: pending, syncing, synced, failed

🏗️ Arsitektur

📦 Komponen Utama

1. TransactionLocalEntity

Entity Isar untuk menyimpan transaksi offline:
File: lib/database/isar/entities/transaction_local_entity.dart

2. TransactionLocalService

Service untuk CRUD transaksi offline:
File: lib/core/transaction/transaction_local_service.dart

3. BatchSyncService

Service untuk batch sync ke backend:
File: lib/core/sync/batch_sync_service.dart

4. OfflineSyncService Integration

Integrasi auto-sync saat online:
File: lib/core/sync/offline_sync_service.dart

5. TransactionApi Endpoint

Endpoint untuk batch sync:
File: lib/core/transaction/transaction_api.dart

🔧 Dependency Injection

Registrasi di NetworkModule:

📝 Cara Penggunaan

1. Create Offline Transaction

2. Manual Sync

3. Check Sync Statistics

4. Retry Failed Transactions

🚀 Setup & Installation

1. Update IsarDb Schema

Tambahkan TransactionLocalEntity ke schema Isar:

2. Run Build Runner

Generate file .g.dart:

3. Initialize OfflineSyncService

Di main.dart:

🔍 Monitoring & Debugging

AppLog Integration

Semua operasi offline-first sudah terintegrasi dengan AppLog:

Isar Inspector

Gunakan Isar Inspector untuk debug database lokal:

⚠️ Best Practices

Penting: Selalu gunakan offline_reference yang unik untuk mencegah duplikasi transaksi saat sync.
Jalankan cleanup transaksi yang sudah sync secara berkala untuk menghemat storage:
TTL default untuk transaction sync adalah 2 menit. Sesuaikan berdasarkan kebutuhan bisnis.

🐛 Troubleshooting

Transaksi Tidak Tersinkronisasi

  1. Periksa koneksi internet
  2. Cek status sync: await transactionLocalService.getStatistics()
  3. Lihat log error di AppLog
  4. Retry manual: await transactionLocalService.retryFailedTransactions()

Duplikasi Transaksi

Backend sudah menangani duplikasi menggunakan offline_reference. Jika tetap terjadi duplikasi:
  1. Pastikan offline_reference unik (format: DEVICE_ID-timestamp)
  2. Periksa index unique di database backend
  3. Cek response dari batch-sync endpoint

Build Runner Error

📚 Referensi

🎯 Next Steps

UI Implementation

Implementasi UI untuk monitoring sync status

Backend Setup

Setup backend untuk batch-sync endpoint

Testing

Testing strategi untuk offline-first

Performance

Optimasi performa offline-first