import Database from 'better-sqlite3' import { join } from 'path' import { existsSync, mkdirSync } from 'fs' import { dirname } from 'path' let db: Database.Database export async function getDatabase() { if (!db) { const dbPath = process.env.NODE_ENV === 'production' ? '/data/sermons.db' : './data/sermons.db' // Ensure directory exists const dir = dirname(dbPath) if (!existsSync(dir)) { mkdirSync(dir, { recursive: true }) } db = new Database(dbPath) await initializeDatabase(db) } return db } async function initializeDatabase(db: Database.Database) { // Create sermons table db.exec(` CREATE TABLE IF NOT EXISTS sermons ( id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT NOT NULL, date TEXT NOT NULL, slug TEXT UNIQUE NOT NULL, bible_references TEXT, personal_application TEXT, pastor_challenge TEXT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ) `) // Create users table for authentication db.exec(` CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT UNIQUE NOT NULL, password_hash TEXT NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP ) `) // Note: Admin user creation is handled in auth.ts to avoid circular dependencies } export function closeDatabase() { if (db) { db.close() db = null } }