import { MongoDBClient } from './client'; import { mongodbConfig } from '@stock-bot/config'; import type { MongoDBClientConfig, MongoDBConnectionOptions } from './types'; /** * Factory function to create a MongoDB client instance */ export function createMongoDBClient( config?: Partial, options?: MongoDBConnectionOptions ): MongoDBClient { return new MongoDBClient(config, options); } /** * Create a MongoDB client with default configuration */ export function createDefaultMongoDBClient(): MongoDBClient { const config: Partial = { host: mongodbConfig.MONGODB_HOST, port: mongodbConfig.MONGODB_PORT, database: mongodbConfig.MONGODB_DATABASE, username: mongodbConfig.MONGODB_USERNAME, password: mongodbConfig.MONGODB_PASSWORD, uri: mongodbConfig.MONGODB_URI }; return new MongoDBClient(config); } /** * Singleton MongoDB client instance */ let defaultClient: MongoDBClient | null = null; /** * Get or create the default MongoDB client instance */ export function getMongoDBClient(): MongoDBClient { if (!defaultClient) { defaultClient = createDefaultMongoDBClient(); } return defaultClient; } /** * Connect to MongoDB using the default client */ export async function connectMongoDB(): Promise { const client = getMongoDBClient(); if (!client.connected) { await client.connect(); await client.createIndexes(); } return client; } /** * Disconnect from MongoDB */ export async function disconnectMongoDB(): Promise { if (defaultClient) { await defaultClient.disconnect(); defaultClient = null; } }