@fontoxml/fontoxml-development-tools
Version:
Development tools for Fonto.
66 lines (60 loc) • 1.71 kB
JavaScript
import correlationIdRepository from './correlationIdRepository.js';
import EARLY_RETURN_SYMBOL from './review-annotations/EarlyReturnSymbol.js';
import mapAnnotationResult from './review-annotations/mapAnnotationResult.js';
export default function configureReviewAnnotationGetPostRouteHandler(
annotationDatabase,
debugConfiguration
) {
return (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;
}
debugConfiguration
.getTimeoutConfigForRoute(
req.cms,
editSessionToken,
'/review/annotation/get',
'POST'
)
.then((timeoutSet) => {
if (timeoutSet) {
return Promise.reject(EARLY_RETURN_SYMBOL);
}
return debugConfiguration.getDebugConfigurationForAnnotationGet(
req.cms,
editSessionToken
);
})
.then((debugStatusGetCode) => {
if (debugStatusGetCode) {
res.status(debugStatusGetCode).end();
return Promise.reject(EARLY_RETURN_SYMBOL);
}
const currentSession = req.getFontoSession(editSessionToken);
return annotationDatabase.getAnnotations(
req.cms,
currentSession,
annotationIds
);
})
.then((annotations) => {
res.set('content-type', 'application/json; charset=utf-8').json(
{
annotations: annotations.map(mapAnnotationResult),
}
);
})
.catch((error) => {
if (error !== EARLY_RETURN_SYMBOL) {
res.status(500).send(error);
}
});
};
}