const sqlite3 = require('sqlite3').verbose(); const path = require('path'); const fs = require('fs'); const dbPath = path.join(__dirname, 'data', 'database.sqlite'); const dataDir = path.dirname(dbPath); if (!fs.existsSync(dataDir)) { fs.mkdirSync(dataDir, { recursive: true }); } const db = new sqlite3.Database(dbPath, (err) => { if (err) { console.error('Error opening database', err.message); } else { console.log('Connected to the SQLite database.'); db.run(`CREATE TABLE IF NOT EXISTS profiles ( id TEXT PRIMARY KEY, email TEXT UNIQUE, password_hash TEXT, role TEXT DEFAULT 'user', api_credits INTEGER DEFAULT 10, storage_limit_mb INTEGER DEFAULT 500, is_active INTEGER DEFAULT 0 )`, (err) => { // Attempt to add column for existing databases (fails silently if exists) if (!err) { db.run('ALTER TABLE profiles ADD COLUMN is_active INTEGER DEFAULT 0', () => {}); } }); db.run(`CREATE TABLE IF NOT EXISTS projects ( id TEXT PRIMARY KEY, user_id TEXT, name TEXT, scene_data TEXT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES profiles (id) )`); } }); const run = (sql, params = []) => { return new Promise((resolve, reject) => { db.run(sql, params, function (err) { if (err) reject(err); else resolve({ id: this.lastID, changes: this.changes }); }); }); }; const get = (sql, params = []) => { return new Promise((resolve, reject) => { db.get(sql, params, (err, result) => { if (err) reject(err); else resolve(result); }); }); }; const all = (sql, params = []) => { return new Promise((resolve, reject) => { db.all(sql, params, (err, rows) => { if (err) reject(err); else resolve(rows); }); }); }; module.exports = { db, run, get, all };