UNPKG

@fontoxml/fontoxml-development-tools

Version:

Development tools for Fonto.

79 lines (69 loc) 2.15 kB
/** @typedef {import('../../src/getAppConfig.js').DevCmsConfig} DevCmsConfig */ /** * @param {DevCmsConfig} _config */ export default function configureDocumentRevisionGetPostRouteHandler(_config) { return (req, res) => { const documentsRevisions = req.body.documentsRevisions; const correlationIdRepository = req.repositories.correlationId; // Because these requests do not originate from the editor, but from another server, we // have no edit session token. We do, however, have an correlationId which we may resolve // to the editSessionToken used by the corresponding call to the proxy. // For review this endpoint might also be called from the editor, in which case the // editSessionToken is provided as a body parameter. const editSessionToken = req.body.context && req.body.context.editSessionToken ? req.body.context.editSessionToken : correlationIdRepository.getEditSessionTokenForRequest(req); const documentPromises = documentsRevisions.map((documentRevisions) => { const documentId = documentRevisions.documentId; const documentExists = req.cms.existsSync(documentId); if (!documentExists) { return { documentId, status: 404, }; } const revisionPromises = documentRevisions.revisionIds.map( (revisionId) => { return new Promise((resolve, _) => { req.cms.loadRevision( documentId, revisionId, editSessionToken, (error, content) => { const revisionResponse = { revisionId, }; if (error) { revisionResponse.status = 404; } else { revisionResponse.status = 200; revisionResponse.revision = { content, }; } resolve(revisionResponse); } ); }); } ); return Promise.all(revisionPromises).then((revisions) => { return { documentId, status: 200, revisions, }; }); }); Promise.all(documentPromises).then((results) => { const response = { results, }; res.status(200) .set('content-type', 'application/json; charset=utf-8') .json(response); }); }; }