NestJS (6 services): implement @RequirePermission decorator with SetMetadata+Reflector, register APP_GUARD globally, fix as assertions to type guards, add explicit return types, fix import type for express, fix /metrics implicit any, replace native Error with ApplicationError, remove typeorm remnants, register LifecycleService. teacher-bff: add logger, ApplicationError, GlobalErrorFilter, forward real userId to downstream, log downstream failures, migrate health controller to shared/health. Go (2 services): interface to any, doc comments, CORS dev whitelist, JWT secret fail-fast, push-gateway internal API auth, metrics and readyz endpoints, remove dead code. Python (2 services): lifespan return type, dev_mode to bool, data-ana APIRouter, ai POST body model, ClickHouse async wrapping.
26 lines
553 B
TypeScript
26 lines
553 B
TypeScript
import { drizzle } from "drizzle-orm/mysql2";
|
|
import type { MySql2Database } from "drizzle-orm/mysql2";
|
|
import mysql from "mysql2/promise";
|
|
import { env } from "./env.js";
|
|
|
|
let pool: mysql.Pool | null = null;
|
|
|
|
export function getDb(): MySql2Database {
|
|
if (!pool) {
|
|
pool = mysql.createPool({
|
|
uri: env.DATABASE_URL,
|
|
waitForConnections: true,
|
|
connectionLimit: 10,
|
|
queueLimit: 0,
|
|
});
|
|
}
|
|
return drizzle(pool);
|
|
}
|
|
|
|
export async function closeDb(): Promise<void> {
|
|
if (pool) {
|
|
await pool.end();
|
|
pool = null;
|
|
}
|
|
}
|