refactor backend route and fulfillment modules

This commit is contained in:
yml
2026-05-21 18:38:04 +08:00
parent 1a9c832c7a
commit efa41ba976
22 changed files with 2441 additions and 2246 deletions
+55
View File
@@ -0,0 +1,55 @@
import type { Server } from "node:http";
import { stopScheduledJobs } from "../services/scheduler/scheduler-service.js";
import { closeOcrService } from "../services/session/ocr.js";
import { closeAllTencentBrowserSessions } from "../services/session/session.js";
import { logError, logInfo } from "../utils/logger.js";
import type { StartupState } from "./state.js";
export function createShutdownController(server: Server, startupState: StartupState) {
let shutdownStarted = false;
async function shutdown(signal: string) {
if (shutdownStarted) {
return;
}
shutdownStarted = true;
startupState.phase = "shutting_down";
logInfo("[shutdown]", `received ${signal}, closing browser sessions and HTTP server`);
stopScheduledJobs();
try {
await closeAllTencentBrowserSessions({ markClosed: true });
} catch (error) {
logError("[shutdown]", "failed to close browser sessions", error);
}
try {
await closeOcrService();
} catch (error) {
logError("[shutdown]", "failed to close OCR service", error);
}
if (!server.listening) {
return;
}
await new Promise<void>((resolve) => {
server.close((error) => {
if (error) {
logError("[shutdown]", "failed to close HTTP server", error);
process.exitCode = 1;
}
resolve();
});
});
}
return {
isShutdownStarted: () => shutdownStarted,
shutdown,
};
}