import { MongoDBClient } from './client'; import type { MongoDBClientConfig } from './types'; import type { Db } from 'mongodb'; /** * Singleton MongoDB client instance * Provides global access to a single MongoDB connection */ let instance: MongoDBClient | null = null; /** * Initialize the singleton MongoDB client */ export async function connectMongoDB(config?: MongoDBClientConfig): Promise { if (!instance) { if (!config) { throw new Error('MongoDB client not initialized. Call connectMongoDB(config) first.'); } instance = new MongoDBClient(config); await instance.connect(); } return instance; } /** * Get the singleton MongoDB client instance * @throws Error if not initialized */ export function getMongoDBClient(): MongoDBClient { if (!instance) { throw new Error('MongoDB client not initialized. Call connectMongoDB(config) first.'); } return instance; } /** * Get the MongoDB database instance * @throws Error if not initialized */ export function getDatabase(): Db { if (!instance) { throw new Error('MongoDB client not initialized. Call connectMongoDB(config) first.'); } return instance.getDatabase(); } /** * Check if the MongoDB client is initialized */ export function isInitialized(): boolean { return instance !== null && instance.connected; } /** * Disconnect and reset the singleton instance */ export async function disconnectMongoDB(): Promise { if (instance) { await instance.disconnect(); instance = null; } }