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>
This commit is contained in:
69
services/database.js
Normal file
69
services/database.js
Normal file
@@ -0,0 +1,69 @@
|
||||
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
|
||||
};
|
||||
Reference in New Issue
Block a user