Files
nlcc-itinerary/server/utils/database.ts

63 lines
1.6 KiB
TypeScript

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) {
// Use absolute path in production (Docker), relative path in development
const isProduction = process.env.NODE_ENV === 'production'
const dbPath = isProduction
? '/app/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
}
}