Spaces:
Running
Running
File size: 1,526 Bytes
3ca9355 7642c91 3ca9355 75007fd 3ca9355 75007fd 3ca9355 34cfba1 3ca9355 34cfba1 3ca9355 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
/**
* 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();
}
};
|