From ef55d9bb24430610b60c1b77821307cd72c08c55 Mon Sep 17 00:00:00 2001 From: zwlucas Date: Sat, 25 Jul 2026 18:23:29 -0300 Subject: feat: upload of the project Signed-off-by: zwlucas --- api/src/db/connection.ts | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 api/src/db/connection.ts (limited to 'api/src/db/connection.ts') diff --git a/api/src/db/connection.ts b/api/src/db/connection.ts new file mode 100644 index 0000000..2982336 --- /dev/null +++ b/api/src/db/connection.ts @@ -0,0 +1,37 @@ +/** + * 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; -- cgit v1.2.3