diff --git a/server/src/index.ts b/server/src/index.ts index 83698b45c..45c75ac8b 100755 --- a/server/src/index.ts +++ b/server/src/index.ts @@ -17,22 +17,31 @@ const startApp = async () => { // Validate environment variables first const env = validateEnv(); + // Create settings service (env only — DB repository injected after connect) + const settingsService = new SettingsService(env); + const envSettings = settingsService.loadSettings(); + // Create logger + logger = new Logger({ envSettings }); + + // Initialize services (connects DB, creates repositories, injects settingsRepository) + const services = await initializeServices({ logger, envSettings, settingsService, queueMode: envSettings.queueMode }); + + // If this is a worker instance, we're done. No need for express + if (envSettings.queueMode === "worker") { + logger.info({ + message: "Worker instance started. API will not be started", + service: SERVICE_NAME, + }); + initShutdownListener(null, services); + return; + } + // FE path const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const openApiSpec = JSON.parse(fs.readFileSync(path.join(__dirname, "../openapi.json"), "utf8")); const frontendPath = path.join(__dirname, "..", "public"); - // Create settings service (env only — DB repository injected after connect) - const settingsService = new SettingsService(env); - const envSettings = settingsService.loadSettings(); - - // Create logger - logger = new Logger({ envSettings }); - - // Initialize services (connects DB, creates repositories, injects settingsRepository) - const services = await initializeServices({ logger, envSettings, settingsService }); - // Initialize controllers const controllers = initializeControllers(services); diff --git a/server/src/shutdown.ts b/server/src/shutdown.ts index 877aef325..3c1fc4ee7 100644 --- a/server/src/shutdown.ts +++ b/server/src/shutdown.ts @@ -2,7 +2,7 @@ import { InitializedServices } from "./config/services.js"; import { logger } from "./utils/logger.js"; import type { Server } from "http"; -export const initShutdownListener = (server: Server, services: InitializedServices) => { +export const initShutdownListener = (server: Server | null, services: InitializedServices) => { const SERVICE_NAME = "Server"; let isShuttingDown = false; @@ -15,7 +15,7 @@ export const initShutdownListener = (server: Server, services: InitializedServic logger.info({ message: "Attempting graceful shutdown" }); try { - server.close(); + server?.close(); await services.jobQueue.shutdown(); await services.db.disconnect(); logger.info({ message: "Graceful shutdown complete" });