import { MongoClient, Db } from 'mongodb'; const mongoConfig = { autoCreate: process.env.NODE_ENV !== 'production', readPreference: 'secondaryPreferred', connectTimeoutMS: 8000, serverSelectionTimeoutMS: 8000, }; export default class MongoDb { private static instance: MongoDb; protected client?: MongoClient; public static getInstance(): MongoDb { if (!MongoDb.instance) { MongoDb.instance = new MongoDb(); } return MongoDb.instance; } private async getMongoClient(): Promise { if (!this.client) { const mongoUrl = process.env.DATABASE_URI!; this.client = new MongoClient(mongoUrl, { connectTimeoutMS: mongoConfig.connectTimeoutMS, }); await this.client.connect(); } return this.client; } async getDbConnection(): Promise { const client: MongoClient = await this.getMongoClient(); return client.db(); } async disconnectMongoClient(): Promise { const client = await this.getMongoClient(); await client.close(); this.client = undefined; } }