2026-04-05 10:45:21 -05:00
|
|
|
import 'dotenv/config'
|
|
|
|
|
import { buildApp } from './app.js'
|
|
|
|
|
import { config } from './config.js'
|
|
|
|
|
import prisma from './db/client.js'
|
2026-04-11 05:17:49 -05:00
|
|
|
import { startScheduler, stopScheduler } from './scheduler.js'
|
2026-04-05 10:45:21 -05:00
|
|
|
|
|
|
|
|
async function start() {
|
|
|
|
|
let app
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
await prisma.$connect()
|
2026-04-11 05:17:49 -05:00
|
|
|
console.log('[nixpanel] Database connected')
|
2026-04-05 10:45:21 -05:00
|
|
|
|
|
|
|
|
app = await buildApp()
|
|
|
|
|
|
2026-04-05 10:54:15 -05:00
|
|
|
await app.listen({ port: config.server.nixserverPort, host: config.server.host })
|
2026-04-11 05:17:49 -05:00
|
|
|
console.log(`[nixpanel] API running on ${config.server.host}:${config.server.nixserverPort}`)
|
|
|
|
|
|
|
|
|
|
startScheduler()
|
2026-04-05 10:45:21 -05:00
|
|
|
|
|
|
|
|
} catch (err) {
|
2026-04-11 05:17:49 -05:00
|
|
|
console.error('[nixpanel] Failed to start:', err)
|
2026-04-05 10:45:21 -05:00
|
|
|
await prisma.$disconnect()
|
|
|
|
|
process.exit(1)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const shutdown = async (signal: string) => {
|
2026-04-11 05:17:49 -05:00
|
|
|
console.log(`[nixpanel] ${signal} received, shutting down...`)
|
2026-04-05 10:45:21 -05:00
|
|
|
await app?.close()
|
2026-04-11 05:17:49 -05:00
|
|
|
await stopScheduler()
|
2026-04-05 10:45:21 -05:00
|
|
|
await prisma.$disconnect()
|
|
|
|
|
process.exit(0)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
process.on('SIGTERM', () => shutdown('SIGTERM'))
|
|
|
|
|
process.on('SIGINT', () => shutdown('SIGINT'))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
start()
|