66 lines
1.6 KiB
TypeScript
66 lines
1.6 KiB
TypeScript
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<MongoDBClientConfig>,
|
|
options?: MongoDBConnectionOptions
|
|
): MongoDBClient {
|
|
return new MongoDBClient(config, options);
|
|
}
|
|
|
|
/**
|
|
* Create a MongoDB client with default configuration
|
|
*/
|
|
export function createDefaultMongoDBClient(): MongoDBClient {
|
|
const config: Partial<MongoDBClientConfig> = {
|
|
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<MongoDBClient> {
|
|
const client = getMongoDBClient();
|
|
if (!client.connected) {
|
|
await client.connect();
|
|
await client.createIndexes();
|
|
}
|
|
return client;
|
|
}
|
|
|
|
/**
|
|
* Disconnect from MongoDB
|
|
*/
|
|
export async function disconnectMongoDB(): Promise<void> {
|
|
if (defaultClient) {
|
|
await defaultClient.disconnect();
|
|
defaultClient = null;
|
|
}
|
|
}
|