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