@fontoxml/fontoxml-development-tools
Version:
Development tools for Fonto.
58 lines (49 loc) • 1.69 kB
JavaScript
import asyncRouteWithLockCleanupHandler from '../asyncRouteWithLockCleanupHandler.js';
import correlationIdRepository from './correlationIdRepository.js';
import mapAnnotationResult from './review-annotations/mapAnnotationResult.js';
/** @typedef {import('../../src/getAppConfig.js').DevCmsConfig} DevCmsConfig */
/**
* @param {DevCmsConfig} config
*/
export default function configureReviewAnnotationGetPostRouteHandler(config) {
return asyncRouteWithLockCleanupHandler(async (_acquireLock, req, res) => {
const { annotationIds } = req.body;
const editSessionToken = req.body.context
? req.body.context.editSessionToken
: correlationIdRepository.getEditSessionTokenForRequest(req);
if (!annotationIds || !annotationIds.length) {
res
.status(400)
.send('Missing at least one item in "annotationIds" in the request.');
return;
}
const timeoutSet = await config.debugConfiguration.getTimeoutConfigForRoute(
req.cms,
editSessionToken,
'/review/annotation/get',
'POST',
);
if (timeoutSet) {
// Do not handle the request, but let it time out.
return new Promise(() => {});
}
const debugStatusGetCode =
await config.debugConfiguration.getDebugConfigurationForAnnotationGet(
req.cms,
editSessionToken,
);
if (debugStatusGetCode) {
res.status(debugStatusGetCode).end();
return;
}
const currentSession = req.getFontoSession(editSessionToken);
const annotations = await req.repositories.annotation.getAnnotations(
req.cms,
currentSession,
annotationIds,
);
res.set('content-type', 'application/json; charset=utf-8').json({
annotations: annotations.map(mapAnnotationResult),
});
});
}