adds database mongoose event hooks
This commit is contained in:
		@@ -1,10 +1,9 @@
 | 
				
			|||||||
// aqui la conexión con MongoDB, usando mongoose o cualquier otro odm que vaya a usar
 | 
					import mongoose from 'mongoose';
 | 
				
			||||||
// 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
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
export class DatabaseConnection {
 | 
					export class DatabaseConnection {
 | 
				
			||||||
    private static instance: DatabaseConnection;
 | 
					    private static instance: DatabaseConnection;
 | 
				
			||||||
    // private isConnected: boolean = false; // a implementar
 | 
					    private isConnected: boolean = false; // a implementar
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
    private constructor() {}
 | 
					    private constructor() {}
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
@@ -14,4 +13,43 @@ export class DatabaseConnection {
 | 
				
			|||||||
      }
 | 
					      }
 | 
				
			||||||
      return DatabaseConnection.instance;
 | 
					      return DatabaseConnection.instance;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public async connect(): Promise<void> {
 | 
				
			||||||
 | 
					      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;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user