diff --git a/server/src/server/router/ir/direct-manual/router.ts b/server/src/server/router/ir/direct-manual/router.ts index d3d830580..0157adc7d 100644 --- a/server/src/server/router/ir/direct-manual/router.ts +++ b/server/src/server/router/ir/direct-manual/router.ts @@ -1,7 +1,11 @@ import { Router } from "express"; import { SYMBOL_TachiAPIAuth } from "lib/constants/tachi"; import { ExpressWrappedScoreImportMain } from "lib/score-import/framework/express-wrapper"; +import { MakeScoreImport } from "lib/score-import/framework/score-import"; +import { ScoreImportJobData } from "lib/score-import/worker/types"; +import { ServerConfig } from "lib/setup/config"; import { RequirePermissions } from "server/middleware/auth"; +import { Random20Hex } from "utils/misc"; const router: Router = Router({ mergeParams: true }); @@ -10,16 +14,42 @@ const router: Router = Router({ mergeParams: true }); * @name POST /ir/direct-manual/import */ router.post("/import", RequirePermissions("submit_score"), async (req, res) => { - const intent = req.header("X-User-Intent"); + const userIntent = !!req.header("X-User-Intent"); - const responseData = await ExpressWrappedScoreImportMain( - req[SYMBOL_TachiAPIAuth].userID!, - !!intent, - "ir/direct-manual", - [req.body] - ); + if (ServerConfig.USE_EXTERNAL_SCORE_IMPORT_WORKER) { + const importID = Random20Hex(); - return res.status(responseData.statusCode).json(responseData.body); + const job: ScoreImportJobData<"ir/direct-manual"> = { + importID, + userID: req[SYMBOL_TachiAPIAuth].userID!, + userIntent, + importType: "ir/direct-manual", + parserArguments: [req.body], + }; + + // Fire the score import, but make no guarantees about its state. + MakeScoreImport(job); + + return res.status(202).json({ + success: true, + description: + "Import loaded into queue. You can poll the provided URL for information on when its complete.", + body: { + url: `${ServerConfig.OUR_URL}/api/v1/imports/${importID}/poll-status`, + importID, + }, + }); + } else { + // Fire the score import and wait for it to finish! + const importResponse = await ExpressWrappedScoreImportMain<"ir/direct-manual">( + req[SYMBOL_TachiAPIAuth].userID!, + userIntent, + "ir/direct-manual", + [req.body] + ); + + return res.status(importResponse.statusCode).json(importResponse.body); + } }); export default router;