/** * connection.ts * * Singleton de conexão com o banco de dados. * * Exporta uma única instância do Drizzle ORM configurada com: * - better-sqlite3 como driver síncrono * - WAL mode para concorrência * - Foreign keys habilitadas * - Schema tipado para autocompletar queries * * Uso em qualquer módulo da aplicação: * import { db } from '@/db/connection' */ import Database from 'better-sqlite3'; import { drizzle } from 'drizzle-orm/better-sqlite3'; import * as schema from './schema.js'; const DATABASE_URL = process.env['DATABASE_URL'] ?? 'file:./helpdesk.db'; const dbPath = DATABASE_URL.replace(/^file:/, ''); // ─── Criação do cliente SQLite ──────────────────────────────────────────────── const sqlite = new Database(dbPath); // WAL mode: leituras não bloqueiam escritas (essencial para servidor web) sqlite.pragma('journal_mode = WAL'); // Ativa integridade referencial (desativada por padrão no SQLite) sqlite.pragma('foreign_keys = ON'); // ─── Instância Drizzle com schema completo ──────────────────────────────────── // Passar o schema habilita db.query.tickets.findMany() com joins automáticos export const db = drizzle(sqlite, { schema }); // Exporta o tipo para uso em funções que recebem `db` como parâmetro export type Database = typeof db;