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();
    }
};