From 015fe8b4b1314e21483682cb702a5f61bb492258 Mon Sep 17 00:00:00 2001 From: Foxix Date: Tue, 8 Jul 2025 00:12:12 +0300 Subject: [PATCH] small fixes and repair shit code --- src/db.js | 83 +++++++++++++++++++++++++++--------- src/models/user.js | 0 src/routes/auth.routes.js | 0 src/routes/session.routes.js | 0 src/services/auth.service.js | 0 5 files changed, 62 insertions(+), 21 deletions(-) create mode 100644 src/models/user.js create mode 100644 src/routes/auth.routes.js create mode 100644 src/routes/session.routes.js create mode 100644 src/services/auth.service.js diff --git a/src/db.js b/src/db.js index 6d045b9..ddc7bf3 100644 --- a/src/db.js +++ b/src/db.js @@ -12,51 +12,90 @@ let clientPromise; const clientOptions = { maxPoolSize: 10, minPoolSize: 0, - serverSelectionTimeoutMS: 5000, + serverSelectionTimeoutMS: 30000, socketTimeoutMS: 45000, connectTimeoutMS: 30000, retryWrites: true, w: 'majority', - tlsAllowInvalidCertificates: true, - heartbeatFrequencyMS: 10000, - minHeartbeatFrequencyMS: 500, - maxIdleTimeMS: 30000, - waitQueueTimeoutMS: 30000 + + serverApi: { + version: '1', + strict: true, + deprecationErrors: true + } }; +// Connection management +async function initializeClient() { + try { + client = new MongoClient(uri, clientOptions); + + // Minimal essential monitoring + client.on('serverHeartbeatFailed', (error) => { + console.error('MongoDB server heartbeat failed:', error); + }); + + client.on('connectionPoolCleared', () => { + console.warn('MongoDB connection pool cleared'); + }); + + await client.connect(); + console.log('MongoDB connection established'); + return client; + } catch (error) { + console.error('Failed to initialize MongoDB client:', error); + throw error; + } +} + if (process.env.NODE_ENV === 'development') { if (!global._mongoClientPromise) { - client = new MongoClient(uri, clientOptions); - global._mongoClientPromise = client.connect(); + global._mongoClientPromise = initializeClient(); } clientPromise = global._mongoClientPromise; } else { - client = new MongoClient(uri, clientOptions); - clientPromise = client.connect(); + clientPromise = initializeClient(); } async function getDb() { - const _client = await clientPromise; - return _client.db(); + try { + const _client = await clientPromise; + const db = _client.db(); + + // Basic connection validation + if (!_client.topology || !_client.topology.isConnected()) { + console.warn('MongoDB connection lost, reconnecting...'); + await _client.connect(); + } + + return db; + } catch (error) { + console.error('Error getting MongoDB database:', error); + throw error; + } } async function closeConnection() { if (client) { - await client.close(); + try { + await client.close(true); + client = null; + global._mongoClientPromise = null; + console.log('MongoDB connection closed'); + } catch (error) { + console.error('Error closing MongoDB connection:', error); + } } } -module.exports = { getDb, closeConnection }; - -process.on('SIGINT', async () => { +// Clean up handlers +const cleanup = async () => { await closeConnection(); process.exit(0); -}); +}; -process.on('SIGTERM', async () => { - await closeConnection(); - process.exit(0); -}); +process.on('SIGTERM', cleanup); +process.on('SIGINT', cleanup); process.on('uncaughtException', async (err) => { console.error('Uncaught Exception:', err); @@ -69,3 +108,5 @@ process.on('unhandledRejection', async (reason) => { await closeConnection(); process.exit(1); }); + +module.exports = { getDb, closeConnection }; diff --git a/src/models/user.js b/src/models/user.js new file mode 100644 index 0000000..e69de29 diff --git a/src/routes/auth.routes.js b/src/routes/auth.routes.js new file mode 100644 index 0000000..e69de29 diff --git a/src/routes/session.routes.js b/src/routes/session.routes.js new file mode 100644 index 0000000..e69de29 diff --git a/src/services/auth.service.js b/src/services/auth.service.js new file mode 100644 index 0000000..e69de29