stock / src /services /database.ts
Zelyanoth's picture
Upload 101 files
24d40b9 verified
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;
}
}
};