Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
|
|
|
import { drizzle } from 'drizzle-orm/postgres-js';
|
|
|
|
|
import postgres from 'postgres';
|
|
|
|
|
|
|
|
|
|
import * as schema from './schema';
|
|
|
|
|
|
|
|
|
|
const connectionString = process.env.DATABASE_URL!;
|
|
|
|
|
|
|
|
|
|
// Connection pool for queries.
|
|
|
|
|
const queryClient = postgres(connectionString, {
|
|
|
|
|
max: 20,
|
|
|
|
|
idle_timeout: 20,
|
|
|
|
|
connect_timeout: 10,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
export const db = drizzle(queryClient, {
|
|
|
|
|
schema,
|
|
|
|
|
logger: process.env.NODE_ENV === 'development',
|
|
|
|
|
});
|
|
|
|
|
|
2026-04-28 13:28:15 +02:00
|
|
|
/** Close the underlying connection pool. Used by the vitest teardown so
|
|
|
|
|
* the parent process can exit cleanly. */
|
|
|
|
|
export async function closeDb(): Promise<void> {
|
|
|
|
|
await queryClient.end({ timeout: 5 });
|
|
|
|
|
}
|
|
|
|
|
|
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
|
|
|
export type Database = typeof db;
|