Files
lunarfront-app/packages/backend/src/plugins/database.ts
Ryan Moon b8e39369f1
Some checks failed
Build & Release / build (push) Failing after 35s
feat: add app settings table, encryption utility, and generic email service
- app_settings table with encrypted field support (AES-256-GCM, key from ENCRYPTION_KEY env)
- SettingsService for transparent encrypt/decrypt on get/set
- EmailService factory with Resend and SendGrid providers (SMTP stub) — provider config lives in app_settings
- Seeds initial admin user and email settings from env vars on first startup if not already present
- Migration 0039_app_settings.sql

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-05 10:27:20 -05:00

36 lines
1.1 KiB
TypeScript

import fp from 'fastify-plugin'
import { drizzle } from 'drizzle-orm/postgres-js'
import postgres from 'postgres'
import * as storeSchema from '../db/schema/stores.js'
import * as userSchema from '../db/schema/users.js'
import * as accountSchema from '../db/schema/accounts.js'
import * as inventorySchema from '../db/schema/inventory.js'
import * as posSchema from '../db/schema/pos.js'
import * as settingsSchema from '../db/schema/settings.js'
const schema = { ...storeSchema, ...userSchema, ...accountSchema, ...inventorySchema, ...posSchema, ...settingsSchema }
declare module 'fastify' {
interface FastifyInstance {
db: ReturnType<typeof drizzle<typeof schema>>
sql: ReturnType<typeof postgres>
}
}
export const databasePlugin = fp(async (app) => {
const connectionString = process.env.DATABASE_URL
if (!connectionString) {
throw new Error('DATABASE_URL environment variable is required')
}
const sql = postgres(connectionString)
const db = drizzle(sql, { schema })
app.decorate('db', db)
app.decorate('sql', sql)
app.addHook('onClose', async () => {
await sql.end()
})
})