fix: Rename database utility to .server.ts and update imports
This commit is contained in:
71
server/utils/database.server.ts
Normal file
71
server/utils/database.server.ts
Normal file
@@ -0,0 +1,71 @@
|
||||
import Database from 'better-sqlite3'
|
||||
import { join } from 'path'
|
||||
import { existsSync, mkdirSync } from 'fs'
|
||||
import { dirname } from 'path'
|
||||
import bcrypt from 'bcryptjs'
|
||||
|
||||
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
|
||||
)
|
||||
`)
|
||||
|
||||
// Create default admin user if it doesn't exist
|
||||
const config = useRuntimeConfig()
|
||||
const saltRounds = 10
|
||||
const passwordHash = await bcrypt.hash(config.adminPassword, saltRounds)
|
||||
|
||||
const existingAdmin = db.prepare('SELECT id FROM users WHERE username = ?').get('admin')
|
||||
if (!existingAdmin) {
|
||||
db.prepare('INSERT INTO users (username, password_hash) VALUES (?, ?)').run('admin', passwordHash)
|
||||
}
|
||||
}
|
||||
|
||||
export function closeDatabase() {
|
||||
if (db) {
|
||||
db.close()
|
||||
db = null
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user