|
|
@@ -1,22 +1,65 @@
|
|
|
const mongoose = require('mongoose');
|
|
|
-//const config = require('../config/config.json');
|
|
|
-//const { Ticket } = require('../models/ticket.model');
|
|
|
-//const { Restaurant} = require('../models/restaurant.model');
|
|
|
-// const { User } = require('../models/user.model');
|
|
|
- //const bcrypt = require('bcrypt');
|
|
|
-// const Role = require('../lib/role');
|
|
|
-//const db = config.url;
|
|
|
|
|
|
-var db = 'mongodb://database_preprod:27017/mean-fatboar-db';
|
|
|
-//var mongoURI = 'mongodb://localhost:27017/my-db';
|
|
|
-//mongoose.set('useCreateIndex', true)
|
|
|
-mongoose.connect(db, {useNewUrlParser: true, useUnifiedTopology: true })
|
|
|
-.then(() => {
|
|
|
+// URL de connexion à la base de données
|
|
|
+const db = 'mongodb://database_preprod:27017/mean-fatboar-db';
|
|
|
+
|
|
|
+// Options de connexion améliorées
|
|
|
+const options = {
|
|
|
+ useNewUrlParser: true,
|
|
|
+ useUnifiedTopology: true,
|
|
|
+ serverSelectionTimeoutMS: 5000, // Timeout avant échec de connexion
|
|
|
+ socketTimeoutMS: 45000, // Ferme les sockets après 45 secondes d'inactivité
|
|
|
+ keepAlive: true, // Garde la connexion active
|
|
|
+ keepAliveInitialDelay: 300000, // Ping tous les 5 minutes (300000 ms)
|
|
|
+ autoIndex: true, // Construit les index automatiquement
|
|
|
+ retryWrites: true, // Réessaie les opérations d'écriture échouées
|
|
|
+ // autoCreate: true, // Crée automatiquement la collection si elle n'existe pas
|
|
|
+};
|
|
|
+
|
|
|
+// Fonction initiale de connexion
|
|
|
+mongoose.connect(db, options)
|
|
|
+ .then(() => {
|
|
|
console.log("Successfully connected to the database.");
|
|
|
-}).catch(err => {
|
|
|
+ // Créer une collection par défaut pour s'assurer que la base reste existante
|
|
|
+ mongoose.connection.db.createCollection("app_status", function(err, res) {
|
|
|
+ if (err) {
|
|
|
+ console.log("Collection déjà existante, ignoré.");
|
|
|
+ } else {
|
|
|
+ console.log("Collection app_status créée pour maintenir la base de données active.");
|
|
|
+ // Insérer un document pour s'assurer que la collection ne soit pas vide
|
|
|
+ mongoose.connection.db.collection("app_status").updateOne(
|
|
|
+ { name: "system_status" },
|
|
|
+ { $set: { name: "system_status", lastChecked: new Date(), status: "active" } },
|
|
|
+ { upsert: true }
|
|
|
+ );
|
|
|
+ }
|
|
|
+ });
|
|
|
+ })
|
|
|
+ .catch(err => {
|
|
|
console.log("Could not connect to the database.", err);
|
|
|
+ });
|
|
|
+
|
|
|
+// Gestion des erreurs et reconnexion automatique
|
|
|
+mongoose.connection.on('error', (err) => {
|
|
|
+ console.log('Mongoose connection error: ', err);
|
|
|
});
|
|
|
|
|
|
+mongoose.connection.on('disconnected', () => {
|
|
|
+ console.log('Mongoose connection disconnected');
|
|
|
+ setTimeout(() => {
|
|
|
+ mongoose.connect(db, options).catch(err => {
|
|
|
+ console.log("Reconnection failed: ", err);
|
|
|
+ });
|
|
|
+ }, 5000); // Réessayer après 5 secondes
|
|
|
+});
|
|
|
+
|
|
|
+// Intercepter les signaux d'arrêt pour fermer proprement la connexion
|
|
|
+process.on('SIGINT', () => {
|
|
|
+ mongoose.connection.close(() => {
|
|
|
+ console.log('Mongoose connection closed due to app termination');
|
|
|
+ process.exit(0);
|
|
|
+ });
|
|
|
+});
|
|
|
|
|
|
module.exports = mongoose.connection;
|
|
|
|