aboutsummaryrefslogtreecommitdiff
path: root/api/src/db/connection.ts
diff options
context:
space:
mode:
Diffstat (limited to 'api/src/db/connection.ts')
-rw-r--r--api/src/db/connection.ts37
1 files changed, 37 insertions, 0 deletions
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;