/** * IndexedDB Database Service using Dexie.js * Migrated from Angular db.service.ts */ console.log('db.js loaded'); const db = new Dexie('MiPescaDB'); // Define database schema - Increment version to 2 to handle boolean to numeric key transition db.version(2).stores({ captures: 'id, timestamp, synced', species: 'id, commonName, category' }); console.log('Dexie DB schema defined (v2)'); // Database operations const dbService = { /** * Add a new capture to the database */ async addCapture(capture) { return await db.captures.add(capture); }, /** * Get all captures */ async getAllCaptures() { return await db.captures.toArray(); }, /** * Get unsynced captures */ async getUnsyncedCaptures() { return await db.captures.where('synced').equals(0).toArray(); }, /** * Update sync status of a capture */ async updateSyncStatus(id, synced) { return await db.captures.update(id, { synced: synced ? 1 : 0, syncedAt: new Date() }); }, /** * Save species list to database */ async saveSpecies(speciesList) { return await db.species.bulkPut(speciesList); }, /** * Get all species */ async getAllSpecies() { return await db.species.toArray(); }, /** * Clear all data (for testing) */ async clearAll() { await db.captures.clear(); await db.species.clear(); } };