UNPKG

@fontoxml/fontoxml-development-tools

Version:

Development tools for Fonto.

104 lines (95 loc) 2.54 kB
import correlationIdRepository from './correlationIdRepository.js'; import EARLY_RETURN_SYMBOL from './review-annotations/EarlyReturnSymbol.js'; export default function configureReviewStatePostRouteHandler( annotationDatabase, debugConfiguration ) { return (req, res) => { const { documentIds, filterFormValueByName } = req.body; const editSessionToken = req.body.context && req.body.context.editSessionToken ? req.body.context.editSessionToken : correlationIdRepository.getEditSessionTokenForRequest(req); if (!documentIds) { res.status(400).send('Missing a "documentIds" in the request.'); return; } debugConfiguration .getTimeoutConfigForRoute( req.cms, editSessionToken, '/review/state', 'POST' ) .then((timeoutSet) => { if (timeoutSet) { return Promise.reject(EARLY_RETURN_SYMBOL); } return debugConfiguration.getDebugConfigurationForAnnotationState( req.cms, editSessionToken ); }) .then((debugStatusCode) => { if (debugStatusCode) { res.status(debugStatusCode).end(); return Promise.reject(EARLY_RETURN_SYMBOL); } const currentSession = req.getFontoSession(editSessionToken); return annotationDatabase .getAnnotationIdentifiers( req.cms, currentSession, documentIds, filterFormValueByName ) .then((annotationIdentifiers) => { const results = documentIds.reduce( (response, documentId) => { const exist = req.cms.existsSync( documentId, editSessionToken ); const result = { documentId, status: exist ? 200 : 404, annotationIdentifiers: [], }; if (exist) { result.annotationIdentifiers = annotationIdentifiers .filter( (candidate) => candidate.documentId === documentId ) .map((annotationIdentifier) => { return { id: annotationIdentifier.id, revisionId: annotationIdentifier.revisionId, }; }); } response.push(result); return response; }, [] ); res.set( 'content-type', 'application/json; charset=utf-8' ).json({ results, }); }) .catch((error) => { if (error !== EARLY_RETURN_SYMBOL) { console.log(''); console.error(error); res.status(500).send(error); } }); }); }; }