From 069180402ac09e65aeb976d686b03b2021dc6676 Mon Sep 17 00:00:00 2001 From: albert Date: Mon, 28 Jul 2025 12:53:57 +0200 Subject: [PATCH] adds database mongoose event hooks --- src/config/database.ts | 46 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 42 insertions(+), 4 deletions(-) diff --git a/src/config/database.ts b/src/config/database.ts index c0828e3..6dadc1d 100644 --- a/src/config/database.ts +++ b/src/config/database.ts @@ -1,10 +1,9 @@ -// aqui la conexión con MongoDB, usando mongoose o cualquier otro odm que vaya a usar -// las conexión a bases de datos normalmente deberían ser Singleton para reutilizar la conexión -// motivo: pues no saturar la base de datos ni saturarla con multiples conexiones +import mongoose from 'mongoose'; + export class DatabaseConnection { private static instance: DatabaseConnection; - // private isConnected: boolean = false; // a implementar + private isConnected: boolean = false; // a implementar private constructor() {} @@ -14,4 +13,43 @@ export class DatabaseConnection { } return DatabaseConnection.instance; } + + public async connect(): Promise { + if (this.isConnected) { + console.log("database is already connected") + return; + } + + try { + await mongoose.connect(config.mongodbUri, { + maxPoolSize: 10, + serverSelectionTimeoutMS: 5000, + socketTimeoutMS: 45000, + bufferCommands: false, + }); + + this.isConnected = true; + console.log("database connected") + + mongoose.connection.on('error', (error) => { + console.log('MongoDB connection error', { error }); + this.isConnected = false; + }); + + mongoose.connection.on('disconnected', () => { + console.log('MongoDB connection disconnected', { error }); + this.isConnected = false; + }); + + mongoose.connection.on('reconnected', () => { + console.log('MongoDB connection reconnected'); + this.isConnected = true; + }); + + } catch (error) { + console.log('MongoDB Failed to connect', { error }); + this.isConnected = false; + throw error; + } + } }