UNPKG

@fontoxml/fontoxml-development-tools

Version:

Development tools for Fonto.

84 lines (75 loc) 2.24 kB
import asyncRouteWithLockCleanupHandler from '../asyncRouteWithLockCleanupHandler.js'; import httpStatusCodeHelpers from './review-annotations/httpStatusCodeHelpers.js'; import { STATUS_CREATED } from './review-annotations/Result.js'; /** @typedef {import('../../src/getAppConfig.js').DevCmsConfig} DevCmsConfig */ /** * @param {DevCmsConfig} config */ export default function configureReviewAnnotationReplyPostRouteHandler(config) { return asyncRouteWithLockCleanupHandler(async (_acquireLock, req, res) => { const { context: { editSessionToken }, annotationIdentifier, reply, } = req.body; if (!reply) { res.status(400).send('Missing a "reply" field in the request.'); return; } if (!annotationIdentifier) { res .status(400) .send('Missing an "annotationIdentifier" field in the request.'); return; } const timeoutSet = await config.debugConfiguration.getTimeoutConfigForRoute( req.cms, editSessionToken, '/review/annotation/reply', 'POST', ); if (timeoutSet) { // Do not handle the request, but let it time out. return new Promise(() => {}); } const isDebuggingEnabled = await config.debugConfiguration.isDebuggingEnabled( req.cms, editSessionToken, ); if (isDebuggingEnabled) { const stringToVerify = reply.metadata.reply; const foundHttpStatusCode = httpStatusCodeHelpers.getDebugHttpStatusCode( stringToVerify, [400, 500], ); if (foundHttpStatusCode && !foundHttpStatusCode.onDelete) { httpStatusCodeHelpers.sendDebugHttpResponse(res, foundHttpStatusCode); return; } } const currentSession = req.getFontoSession(editSessionToken); const addReplyResult = await req.repositories.annotation.addReply( req.cms, currentSession, reply, annotationIdentifier, ); const httpStatusCode = httpStatusCodeHelpers.mapAnnotationResultStatusToHttpStatusCode( addReplyResult.status, true, ); if (addReplyResult.status !== STATUS_CREATED) { res.status(httpStatusCode).end(); return; } res .status(httpStatusCode) .set('content-type', 'application/json; charset=utf-8') .json({ revisionId: addReplyResult.revisionId, reply: addReplyResult.annotation, }); }); }