File size: 2,171 Bytes
24d40b9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87

import initSqlJs, { Database } from 'sql.js';

let db: Database | null = null;

export default {
  initialize: async () => {
    if (db) {
      return db;
    }

    try {
      const SQL = await initSqlJs({
        locateFile: (file) => `https://sql.js.org/dist/${file}`,
      });
      
      db = new SQL.Database();

      // Create tables if they don't exist
      db.exec(`

        CREATE TABLE IF NOT EXISTS transactions (

          id TEXT PRIMARY KEY,

          title TEXT NOT NULL,

          amount REAL NOT NULL,

          type TEXT NOT NULL,

          category TEXT NOT NULL,

          date TEXT NOT NULL,

          note TEXT,

          message TEXT,

          product_id TEXT,

          quantity INTEGER

        );

        

        CREATE TABLE IF NOT EXISTS products (

          id TEXT PRIMARY KEY,

          name TEXT NOT NULL,

          sku TEXT NOT NULL,

          quantity INTEGER NOT NULL,

          price REAL NOT NULL,

          category TEXT NOT NULL,

          last_updated TEXT NOT NULL,

          reorder_point INTEGER DEFAULT 5,

          trend TEXT DEFAULT 'stable',

          demand TEXT DEFAULT 'medium'

        );

      `);

      console.info('SQLite database initialized successfully');
      
      return db;
    } catch (err) {
      console.error('Failed to initialize SQLite database:', err);
      throw err;
    }
  },
  
  exec: (sql: string, params: any[] = []) => {
    if (!db) {
      throw new Error('Database not initialized. Call initialize() first.');
    }

    try {
      db.run(sql, params);
      
      const selectStatement = db.prepare(sql);
      
      if (selectStatement.sql.startsWith('SELECT')) {
        selectStatement.bind(params);
        
        const result = [];
        while (selectStatement.step()) {
          const row = selectStatement.getAsObject();
          result.push(row);
        }
        selectStatement.free();
        
        return result;
      }
      
      return [];
    } catch (error: any) {
      console.error(`Failed to execute SQL: ${sql}`, error);
      throw error;
    }
  }
};