UNPKG

@fontoxml/fontoxml-development-tools

Version:

Development tools for Fonto.

58 lines (49 loc) 1.69 kB
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), }); }); }