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;