UNPKG

purchase-mcp-server

Version:

Purchase and budget management server handling requisitions, purchase orders, expenses, budgets, and vendor management with ERP access for data extraction

200 lines 7.01 kB
import { MongoClient } from 'mongodb'; import { logger } from './logger.js'; import { config } from './config.js'; // Main MongoDB clients let client = null; let secondaryClient = null; // Specific database clients let devApiClient = null; let etlDevClient = null; let etlDevDataClient = null; /** * Initialize all MongoDB connections * This should be called during server startup */ export async function initializeConnections() { // Skip MongoDB connection in test environment if (process.env.NODE_ENV === 'test') { logger.info('Test environment detected, skipping MongoDB connections'); return; } try { // Initialize primary connection if (!client && config.mongoUri) { client = new MongoClient(config.mongoUri); await client.connect(); logger.info('Connected to primary MongoDB instance'); } // Initialize secondary connection if configured if (!secondaryClient && config.secondaryMongoUri) { secondaryClient = new MongoClient(config.secondaryMongoUri); await secondaryClient.connect(); logger.info('Connected to secondary MongoDB instance'); } // Initialize dev-api connection if (!devApiClient && config.devApiMongoUri) { devApiClient = new MongoClient(config.devApiMongoUri); await devApiClient.connect(); logger.info('Connected to dev-syia-api MongoDB instance'); } // Initialize etl-dev connection if (!etlDevClient && config.etlDevMongoUri) { etlDevClient = new MongoClient(config.etlDevMongoUri); await etlDevClient.connect(); logger.info('Connected to syia-etl-dev MongoDB instance'); } // Initialize etl-dev-data connection if (!etlDevDataClient && config.etlDevDataUri) { etlDevDataClient = new MongoClient(config.etlDevDataUri); await etlDevDataClient.connect(); logger.info('Connected to syia-etl-dev-data MongoDB instance'); } logger.info('All MongoDB connections initialized successfully'); } catch (error) { logger.error('Error initializing MongoDB connections:', error); throw error; } } /** * Get MongoDB client based on URI or default */ export async function getMongoClient(uri) { // Skip MongoDB connection in test environment if (process.env.NODE_ENV === 'test') { logger.info('Test environment detected, skipping MongoDB connection'); return {}; } // If URI is provided, use it for a specific connection if (uri) { // Check for dev-api connection if (uri === config.devApiMongoUri) { if (!devApiClient) { // If not initialized during startup, initialize now devApiClient = new MongoClient(uri); await devApiClient.connect(); logger.info('Connected to dev-syia-api MongoDB instance'); } return devApiClient; } // Check for etl-dev connection if (uri === config.etlDevMongoUri) { if (!etlDevClient) { // If not initialized during startup, initialize now etlDevClient = new MongoClient(uri); await etlDevClient.connect(); logger.info('Connected to syia-etl-dev MongoDB instance'); } return etlDevClient; } // Check for etl-dev-data connection if (uri === config.etlDevDataUri) { if (!etlDevDataClient) { // If not initialized during startup, initialize now etlDevDataClient = new MongoClient(uri); await etlDevDataClient.connect(); logger.info('Connected to syia-etl-dev-data MongoDB instance'); } return etlDevDataClient; } // For specific URIs that don't match any predefined connections if (uri !== config.mongoUri && uri !== config.secondaryMongoUri) { const tempClient = new MongoClient(uri); await tempClient.connect(); return tempClient; } // If it matches secondary URI, use the secondary client if (uri === config.secondaryMongoUri && config.secondaryMongoUri) { if (!secondaryClient) { // If not initialized during startup, initialize now secondaryClient = new MongoClient(uri); await secondaryClient.connect(); logger.info('Connected to secondary MongoDB instance'); } return secondaryClient; } } // Default case: use primary client with config.mongoUri if (!client) { // If not initialized during startup, initialize now client = new MongoClient(config.mongoUri); await client.connect(); logger.info('Connected to primary MongoDB instance'); } return client; } /** * Get dev-api MongoDB client */ export async function getDevApiClient() { return getMongoClient(config.devApiMongoUri); } /** * Get etl-dev MongoDB client */ export async function getEtlDevClient() { return getMongoClient(config.etlDevMongoUri); } /** * Get etl-dev-data MongoDB client */ export async function getEtlDevDataClient() { return getMongoClient(config.etlDevDataUri); } /** * Get etl-dev-data database name */ export function getEtlDevDataDbName() { return config.etlDevDataDbName; } /** * Get dev-api database name */ export function getDevApiDbName() { return config.devApiDbName; } /** * Get etl-dev database name */ export function getEtlDevDbName() { return config.etlDevDbName; } /** * Close all MongoDB connections * This should be called during server shutdown */ export async function closeConnections() { try { if (client) { await client.close(); client = null; logger.info('Closed primary MongoDB connection'); } if (secondaryClient) { await secondaryClient.close(); secondaryClient = null; logger.info('Closed secondary MongoDB connection'); } if (devApiClient) { await devApiClient.close(); devApiClient = null; logger.info('Closed dev-syia-api MongoDB connection'); } if (etlDevClient) { await etlDevClient.close(); etlDevClient = null; logger.info('Closed syia-etl-dev MongoDB connection'); } if (etlDevDataClient) { await etlDevDataClient.close(); etlDevDataClient = null; logger.info('Closed syia-etl-dev-data MongoDB connection'); } logger.info('All MongoDB connections closed successfully'); } catch (error) { logger.error('Error closing MongoDB connections:', error); throw error; } } //# sourceMappingURL=mongodb.js.map