import { createServer as httpServer, Server as HTTPServer } from 'http' import cors from 'cors' import express, { Application } from 'express' import config from '#application/config' import Database from '#application/database' import Logger, { LoggerType } from '#application/logger' import ConsoleManager from '#managers/consoleManager' import DateManager from '#managers/dateManager' import HttpManager from '#managers/httpManager' import QueueManager from '#managers/queueManager' import SocketManager from '#managers/socketManager' import UserManager from '#managers/userManager' import WeatherManager from '#managers/weatherManager' import ZoneManager from '#managers/zoneManager' export class Server { private readonly app: Application private readonly http: HTTPServer private readonly logger = Logger.type(LoggerType.APP) constructor() { this.app = express() this.app.use(cors()) this.app.use(express.json()) this.app.use(express.urlencoded({ extended: true })) this.http = httpServer(this.app) } public async start(): Promise { try { // Initialize database await Database.initialize() // Start HTTP server this.http.listen(config.PORT, config.HOST) this.logger.info(`Server running on port ${config.PORT}`) // Initialize managers await Promise.all([ HttpManager.boot(this.app), SocketManager.boot(this.app, this.http), QueueManager.boot(), UserManager.boot(), // DateManager.boot(), // WeatherManager.boot(), ZoneManager.boot(), ConsoleManager.boot() ]) } catch (error: any) { this.logger.error(`Server failed to start: ${error.message}`) process.exit(1) } } } // Start the server const server = new Server() server.start().catch(console.error)