@fontoxml/fontoxml-development-tools
Version:
Development tools for Fonto.
79 lines (69 loc) • 2.15 kB
JavaScript
/** @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);
});
};
}