initialize method

Future<void> initialize()

Implementation

Future<void> initialize() async {
  if (_db != null) return;
  final appDir = await getApplicationSupportDirectory();
  final dbPath = '${appDir.path}/$_dbName';
  _db = sqlite3.open(dbPath);
  _db!.execute('''
    CREATE TABLE IF NOT EXISTS outbox_events (
      id INTEGER PRIMARY KEY AUTOINCREMENT,
      local_id TEXT NOT NULL,
      table_name TEXT NOT NULL,
      operation TEXT NOT NULL CHECK (operation IN ('insert','upsert','update','delete')),
      payload TEXT NOT NULL,
      state TEXT NOT NULL DEFAULT 'pending' CHECK (state IN ('pending','syncing','synced','failed')),
      created_at TEXT NOT NULL,
      client_updated_at TEXT NOT NULL,
      attempt_count INTEGER NOT NULL DEFAULT 0,
      last_attempt_at TEXT,
      last_error TEXT,
      server_id TEXT
    )
  ''');
  _db!.execute('''
    CREATE INDEX IF NOT EXISTS idx_outbox_state_created
      ON outbox_events(state, created_at)
  ''');
  _db!.execute('''
    CREATE INDEX IF NOT EXISTS idx_outbox_table_local_id
      ON outbox_events(table_name, local_id)
  ''');
  dev.log('Outbox initialized at $dbPath', name: 'OfflineOutbox');
}