96 lines
2.2 KiB
JavaScript
96 lines
2.2 KiB
JavaScript
|
const sqlite3 = require('sqlite3').verbose();
|
||
|
const fs = require('fs');
|
||
|
const config = require('../config/database');
|
||
|
|
||
|
let db;
|
||
|
|
||
|
const createTables = (db) => {
|
||
|
return new Promise((resolve, reject) => {
|
||
|
db.serialize(() => {
|
||
|
// enable foreign keys
|
||
|
db.run('PRAGMA foreign_keys = ON');
|
||
|
|
||
|
// users table
|
||
|
db.run(`
|
||
|
CREATE TABLE IF NOT EXISTS users (
|
||
|
id TEXT PRIMARY KEY,
|
||
|
email TEXT UNIQUE,
|
||
|
password TEXT
|
||
|
)
|
||
|
`, (err) => {
|
||
|
if (err) {
|
||
|
console.error('Error creating users table:', err);
|
||
|
reject(err);
|
||
|
}
|
||
|
});
|
||
|
|
||
|
// snippets table
|
||
|
db.run(`
|
||
|
CREATE TABLE IF NOT EXISTS snippets (
|
||
|
id TEXT PRIMARY KEY,
|
||
|
user_id TEXT,
|
||
|
title TEXT,
|
||
|
html TEXT,
|
||
|
css TEXT,
|
||
|
js TEXT,
|
||
|
share_id TEXT UNIQUE,
|
||
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||
|
FOREIGN KEY(user_id) REFERENCES users(id)
|
||
|
)
|
||
|
`, (err) => {
|
||
|
if (err) {
|
||
|
console.error('Error creating snippets table:', err);
|
||
|
reject(err);
|
||
|
}
|
||
|
resolve();
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
};
|
||
|
|
||
|
const initializeDb = async () => {
|
||
|
return new Promise((resolve, reject) => {
|
||
|
const env = process.env.NODE_ENV || 'development';
|
||
|
const dbPath = config[env].connection.filename;
|
||
|
const dbExists = fs.existsSync(dbPath);
|
||
|
|
||
|
if (db) {
|
||
|
db.close();
|
||
|
}
|
||
|
|
||
|
db = new sqlite3.Database(dbPath, sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE, async (err) => {
|
||
|
if (err) {
|
||
|
console.error('Database connection error:', err);
|
||
|
reject(err);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
try {
|
||
|
// If database doesn't exist, create tables
|
||
|
if (!dbExists) {
|
||
|
await createTables(db);
|
||
|
console.log('Database tables created successfully');
|
||
|
}
|
||
|
|
||
|
console.log('Database connection established');
|
||
|
resolve(db);
|
||
|
} catch (error) {
|
||
|
reject(error);
|
||
|
}
|
||
|
});
|
||
|
});
|
||
|
};
|
||
|
|
||
|
const getDb = () => {
|
||
|
if (!db) {
|
||
|
throw new Error('Database not initialized. Call initializeDb first.');
|
||
|
}
|
||
|
return db;
|
||
|
};
|
||
|
|
||
|
module.exports = {
|
||
|
initializeDb,
|
||
|
getDb
|
||
|
};
|
||
|
|