import mongoose, { Schema, Connection, Model } from "mongoose"; import dotenv from "dotenv"; interface ConnectionCache { [key: string]: Connection; } const connections: ConnectionCache = {}; dotenv.config({ quiet: true }); const MainModel = ( db: string, modelName: string, schema: Schema, collectionName: string ): Model => { const db1_url = `${process.env.MONGO_URI}${db}`; const authOptions = { user: process.env.MONGO_USER, pass: process.env.MONGO_PASSWORD, authSource: process.env.MONGO_AUTH_DB || "admin", maxPoolSize: 50, }; if (connections[db]) { return connections[db].model(modelName, schema, collectionName); } try { const db1 = mongoose.createConnection(db1_url, authOptions); connections[db] = db1; db1.on("connected", () => { console.log(`Connected to MongoDB database: ${db}`); }); db1.on("error", (err) => { console.error( `MongoDB connection error for database ${db}:`, err.message ); }); return db1.model(modelName, schema, collectionName); } catch (error) { console.error("Database connection error:", (error as Error).message); throw error; } }; export default MainModel;