- Install better-sqlite3 package for persistent storage - Create database service with projects table schema - Add indexes on deletedAt and name for efficient queries - Support soft-delete with deletedAt timestamp - Export database instance for use in server.js Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
70 lines
1.6 KiB
JavaScript
70 lines
1.6 KiB
JavaScript
const Database = require('better-sqlite3');
|
|
const path = require('path');
|
|
|
|
/**
|
|
* Initialize SQLite database with projects schema
|
|
*/
|
|
function initializeDatabase() {
|
|
// Database file in project root
|
|
const dbPath = path.join(__dirname, '..', 'database.sqlite');
|
|
|
|
// Initialize database connection
|
|
const db = new Database(dbPath);
|
|
|
|
// Enable WAL mode for better concurrency
|
|
db.pragma('journal_mode = WAL');
|
|
|
|
// Create projects table
|
|
db.exec(`
|
|
CREATE TABLE IF NOT EXISTS projects (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
name TEXT NOT NULL UNIQUE,
|
|
description TEXT,
|
|
icon TEXT DEFAULT '📁',
|
|
color TEXT DEFAULT '#4a9eff',
|
|
path TEXT NOT NULL,
|
|
createdAt TEXT NOT NULL,
|
|
lastActivity TEXT NOT NULL,
|
|
deletedAt TEXT NULL
|
|
)
|
|
`);
|
|
|
|
// Create index on deletedAt for efficient soft-delete queries
|
|
db.exec(`
|
|
CREATE INDEX IF NOT EXISTS idx_projects_deletedAt ON projects(deletedAt)
|
|
`);
|
|
|
|
// Create index on name for efficient name lookups
|
|
db.exec(`
|
|
CREATE INDEX IF NOT EXISTS idx_projects_name ON projects(name)
|
|
`);
|
|
|
|
return db;
|
|
}
|
|
|
|
/**
|
|
* Initialize database with requireAuth check
|
|
*/
|
|
let dbInstance = null;
|
|
|
|
function getDatabase() {
|
|
if (!dbInstance) {
|
|
try {
|
|
dbInstance = initializeDatabase();
|
|
console.log('Database initialized successfully');
|
|
} catch (error) {
|
|
console.error('Failed to initialize database:', error);
|
|
throw error;
|
|
}
|
|
}
|
|
return dbInstance;
|
|
}
|
|
|
|
// Initialize database immediately
|
|
const db = getDatabase();
|
|
|
|
module.exports = {
|
|
db,
|
|
getDatabase
|
|
};
|