Files
SuperCharged-Claude-Code-Up…/services/database.js
uroma 4eadd94e8d feat: add SQLite database and projects table schema
- 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>
2026-01-19 16:42:50 +00:00

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
};