import { mongodbClient } from "./talkpilot"; import { municipalDataMongodbClient } from "./municipal"; import { websitalkMongodbClient } from "./websitalk"; import { configurationMongodbClient } from "./configuration"; import { configurationDbConfig } from "./config"; let isConnected = false; /** * Ensures the database clients are initialized. * This function reads from MONGO_URI. */ export async function ensureDbConnected() { if (isConnected) { return; } const mongoUri = process.env.MONGO_URI || process.env.MONGODB_URI; const talkpilotUri = mongoUri; const municipalUri = mongoUri; const websiteTalkUri = mongoUri; const configurationUri = mongoUri; if (!talkpilotUri) { console.warn("[core-db] MONGO_URI is not set"); } else { const dbNameFromUri = talkpilotUri.split("/").pop()?.split("?")[0]; const dbName = dbNameFromUri || process.env.TALKPILOT_DB_NAME; await mongodbClient.connect(talkpilotUri, dbName); console.info( `[core-db] Connected to TalkPilot MongoDB: ${dbName || "via env"}`, ); } if (!municipalUri) { console.warn("[core-db] MONGO_URI is not set"); } else { const dbNameFromUri = municipalUri.split("/").pop()?.split("?")[0]; const dbName = dbNameFromUri || process.env.MUNICIPAL_DB_NAME; await municipalDataMongodbClient.connect(municipalUri, dbName); console.info( `[core-db] Connected to Municipal Data MongoDB: ${dbName || "via env"}`, ); } if (!websiteTalkUri) { console.warn("[core-db] MONGO_URI is not set"); } else { const dbName = process.env.WEBSITALK_DB_NAME; await websitalkMongodbClient.connect(websiteTalkUri, dbName); console.info( `[core-db] Connected to Website Talk MongoDB: ${dbName || "website-talk (default)"}`, ); } if (!configurationUri) { console.warn("[core-db] MONGO_URI is not set"); } else { const dbName = configurationDbConfig.configurationDbName; await configurationMongodbClient.connect(configurationUri, dbName); console.info( `[core-db] Connected to Configuration MongoDB: ${dbName || "configuration (default)"}`, ); } isConnected = true; } export async function disconnectDb(): Promise { if (!isConnected) { return; } await Promise.all([ mongodbClient.disconnect(), municipalDataMongodbClient.disconnect(), websitalkMongodbClient.disconnect(), configurationMongodbClient.disconnect(), ]); isConnected = false; }