43 lines
1.4 KiB
TypeScript
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.');
|
|
}
|