Some checks failed
Build & Release / build (push) Failing after 35s
- 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>
36 lines
1.1 KiB
TypeScript
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()
|
|
})
|
|
})
|