UNPKG

coddyger

Version:

Coddyger est une bibliothèque JavaScript/TypeScript qui fournit des fonctions communes et des plugins pour la gestion des données, la communication entre services, et des utilitaires avancés pour le développement d'applications.

106 lines (105 loc) 5.19 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.MongooseDataAccess = void 0; const mongoose_1 = __importDefault(require("mongoose")); const globals_1 = __importDefault(require("../../globals")); const coddyger_1 = __importDefault(require("../../coddyger")); class MongooseDataAccess { constructor(connectionUri) { // Options recommandées pour Mongoose 8.x this.options = { serverSelectionTimeoutMS: 5000, // Timeout de sélection du serveur socketTimeoutMS: 45000, // Timeout des opérations maxPoolSize: 10, // Taille maximale du pool de connexions minPoolSize: 1, // Taille minimale du pool de connexions maxIdleTimeMS: 30000, // Temps maximum d'inactivité d'une connexion waitQueueTimeoutMS: 10000, // Timeout de la file d'attente }; // Utiliser l'URI fourni ou construire l'URI par défaut this.connectionUri = connectionUri || `${globals_1.default.database.connectionString}/${globals_1.default.database.name}?authSource=admin`; } connect(uri) { return __awaiter(this, void 0, void 0, function* () { try { // Utiliser l'URI fourni en paramètre, ou celui du constructeur, ou celui par défaut const finalUri = uri || this.connectionUri; // Activer le mode strict pour les requêtes mongoose_1.default.set('strictQuery', true); const connection = yield mongoose_1.default.connect(finalUri, this.options); if (uri) { coddyger_1.default.konsole(`✅ MongoDB connecté :: ${finalUri}`); } else { const dbName = connection.connections[0].name || process.env.DB_NAME || 'non défini'; coddyger_1.default.konsole(`✅ MongoDB connecté :: ${connection.connections[0].host}:${connection.connections[0].port}:${dbName.replace("/undefined", '')}`); } // Gestion des événements de connexion mongoose_1.default.connection.on('error', (err) => { coddyger_1.default.konsole('❌ Erreur de connexion MongoDB', 1); console.error(err); }); mongoose_1.default.connection.on('disconnected', () => { coddyger_1.default.konsole('🔌 MongoDB déconnecté', 2); }); mongoose_1.default.connection.on('reconnected', () => { coddyger_1.default.konsole('♻️ MongoDB reconnecté'); }); // Gestion propre de la fermeture process.on('SIGINT', () => __awaiter(this, void 0, void 0, function* () { try { yield mongoose_1.default.connection.close(); coddyger_1.default.konsole('🛑 Connexion MongoDB fermée suite à l\'arrêt de l\'application'); process.exit(0); } catch (err) { console.error('Erreur lors de la fermeture de la connexion MongoDB:', err); process.exit(1); } })); } catch (err) { coddyger_1.default.konsole('Erreur de connexion MongoDB', 1); console.error(err); throw err; } }); } /** * Exécute une fonction dans une transaction MongoDB (session) * @param callback - Fonction asynchrone recevant la session mongoose * @returns Résultat de la fonction callback */ transaction(callback) { return __awaiter(this, void 0, void 0, function* () { const session = yield mongoose_1.default.startSession(); let result; try { yield session.startTransaction(); result = yield callback(session); yield session.commitTransaction(); } catch (err) { yield session.abortTransaction(); throw err; } finally { session.endSession(); } return result; }); } } exports.MongooseDataAccess = MongooseDataAccess;