71 lines
1.9 KiB
JavaScript
71 lines
1.9 KiB
JavaScript
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 };
|