voyage-and-consumption-mcp-server
Version:
Voyage and consumption management server handling vessel voyages, fuel consumption, performance monitoring, and operational data with ERP access for data extraction
53 lines • 2.04 kB
JavaScript
import { logger } from '../utils/logger.js';
export class DatabaseService {
constructor(connectionManager) {
this.connectionManager = connectionManager;
}
async getCollection(collectionName, useSecondary = false) {
try {
const database = useSecondary
? this.connectionManager.getSecondaryDatabase()
: this.connectionManager.getPrimaryDatabase();
const collection = database.collection(collectionName);
logger.debug(`Retrieved collection: ${collectionName} from ${useSecondary ? 'secondary' : 'primary'} database`);
return collection;
}
catch (error) {
logger.error(`Error getting collection ${collectionName}:`, error);
throw error;
}
}
async executeOperation(operation, collectionName, useSecondary = false) {
try {
const collection = await this.getCollection(collectionName, useSecondary);
const result = await operation(collection);
logger.debug(`Operation completed successfully on collection: ${collectionName}`);
return result;
}
catch (error) {
logger.error(`Error executing operation on collection ${collectionName}:`, error);
throw error;
}
}
async testConnection() {
try {
const status = await this.connectionManager.getConnectionStatus();
logger.info(`Connection status - Primary: ${status.primary}, Secondary: ${status.secondary}`);
return status;
}
catch (error) {
logger.error('Error testing database connections:', error);
throw error;
}
}
getPrimaryDatabase() {
return this.connectionManager.getPrimaryDatabase();
}
getSecondaryDatabase() {
return this.connectionManager.getSecondaryDatabase();
}
async close() {
await this.connectionManager.close();
}
}
//# sourceMappingURL=database-service.js.map