| require('dotenv').config(); | |
| const app = require('./app'); | |
| const omada = require('./services/omada'); | |
| const { initJobs } = require('./jobs'); | |
| const { runMigrations } = require('./utils/migrate'); | |
| const PORT = process.env.PORT || 3000; | |
| async function start() { | |
| // 1. Run DB migrations | |
| try { | |
| await runMigrations(); | |
| } catch (err) { | |
| console.error('[Boot] Migration failed — aborting:', err.message); | |
| process.exit(1); | |
| } | |
| // 2. Boot Omada connection | |
| try { | |
| await omada.initOmada(); | |
| } catch (err) { | |
| console.error('[Boot] Omada init failed:', err.message); | |
| console.warn('[Boot] Continuing without Omada — check OMADA_URL / credentials'); | |
| } | |
| // 3. Start background jobs | |
| initJobs(); | |
| // 3. Listen | |
| app.listen(PORT, () => { | |
| console.log(`[Server] Listening on http://0.0.0.0:${PORT}`); | |
| const host = (process.env.PORTAL_HOST || '').replace(/^https?:\/\//, ''); | |
| console.log(`[Server] Portal base: ${process.env.PORTAL_SCHEME || 'http'}://${host}`); | |
| }); | |
| } | |
| start().catch(err => { | |
| console.error('[Boot] Fatal error:', err.message); | |
| process.exit(1); | |
| }); | |