almeira-web/transporte-cali-buenaventura/backend/src/config/database.ts

43 lines
1.4 KiB
TypeScript

import mongoose from 'mongoose';
// Desactivar bufferCommands para que las operaciones fallen de inmediato y usen el almacenamiento autónomo si MongoDB está offline
mongoose.set('bufferCommands', false);
const MONGODB_URI = process.env.MONGODB_URI || 'mongodb://localhost:27017/transporte_cali_buenaventura';
let isConnected = false;
export function isDatabaseConnected(): boolean {
return mongoose.connection.readyState === 1;
}
export async function connectDatabase(): Promise<typeof mongoose> {
if (mongoose.connection.readyState === 1) {
isConnected = true;
return mongoose;
}
try {
const conn = await mongoose.connect(MONGODB_URI, {
autoIndex: true, // Asegura que los índices 2dsphere se construyan automáticamente
serverSelectionTimeoutMS: 2500, // Timeout rápido para no retrasar la API
connectTimeoutMS: 4000,
});
isConnected = true;
console.log(`✅ [MongoDB Self-Hosted] Conexión establecida exitosamente a: ${conn.connection.host}`);
return conn;
} catch (error) {
isConnected = false;
console.error('❌ [MongoDB Error] Fallo al conectar a la base de datos geoespacial:', error);
throw error;
}
}
export async function disconnectDatabase(): Promise<void> {
if (!isConnected) return;
await mongoose.disconnect();
isConnected = false;
console.log('🔌 [MongoDB] Desconectado.');
}