DEV-BACKEND-CIFO-WALLET/server.js

48 lines
1.3 KiB
JavaScript

const http = require('http');
const app = require('./app');
const db = require('./config/db');
const config = require('./config');
const { startSchedulers, stopSchedulers } = require('./schedulers');
const server = http.createServer(app);
// start server
server.listen(config.port, () => {
console.log(`[SERVER] Listening on :${config.port}`);
if (config.cronEnabled) {
startSchedulers().catch(err => {
console.error('[CRON] Failed to start schedulers:', err);
});
} else {
console.log('[CRON] Disabled by config (CRON_ENABLED=false)');
}
});
// graceful shutdown
const shutdown = async (signal) => {
console.log(`[SERVER] ${signal} received. Shutting down...`);
try {
await stopSchedulers();
server.close(err => {
if (err) {
console.error('[SERVER] Close error:', err);
process.exit(1);
}
if (db && db.end) {
try { db.end(); } catch (e) { /* ignore */ }
}
console.log('[SERVER] Bye.');
process.exit(0);
});
// hard timeout
setTimeout(() => process.exit(0), 10000).unref();
} catch (e) {
console.error('[SERVER] Shutdown error:', e);
process.exit(1);
}
};
['SIGINT','SIGTERM'].forEach(sig => process.on(sig, () => shutdown(sig)));
module.exports = server;