diff --git a/server/controller/CacheManager.js b/server/controller/CacheManager.js index 0d8d9f7af..fa8becfca 100644 --- a/server/controller/CacheManager.js +++ b/server/controller/CacheManager.js @@ -1,16 +1,16 @@ const NodeCache = require("node-cache"); const logger = require("../config/logger"); -// All cache elements will be deleted after one week +// All cache elements will be deleted after 3 days const cache = new NodeCache({ - stdTTL: 60 * 60 * 24 * 7, + stdTTL: 60 * 60 * 24 * 3, checkperiod: 60 * 60 * 6, }); const getCache = (req) => { const value = cache.get(req.originalUrl); if (value) { - logger.debug("access from cache: " + req.originalUrl); + logger.debug("CM: Access from cache: " + req.originalUrl); return value; } }; @@ -28,7 +28,7 @@ const deleteCache = (keysArrayToDelete) => { keysArrayToDelete.some((includeKey) => ck.includes(includeKey)) ); - logger.debug("Will delete these keys from cache: " + keysToDelete); + logger.debug("CM: Will delete these keys from cache: " + keysToDelete); return cache.del(keysToDelete); }; diff --git a/server/controller/FlightController.ts b/server/controller/FlightController.ts index 7ac88191b..ad05578aa 100644 --- a/server/controller/FlightController.ts +++ b/server/controller/FlightController.ts @@ -167,12 +167,22 @@ router.get( if (validationHasErrors(req, res)) return; - const flight = await FlightService.getByExternalId(+req.params.id, { - excludeSecrets: !userHasElevatedRole(req.user), - }); - if (!flight) return res.sendStatus(NOT_FOUND); - try { + if (userHasElevatedRole(req.user)) { + return retrieveFlightForAdmin(req, res); + } + + const value = getCache(req); + if (value) return res.json(value); + + const flight = await FlightService.getByExternalId(+req.params.id, { + excludeSecrets: true, + }); + + if (!flight) return res.sendStatus(NOT_FOUND); + + setCache(req, flight); + res.json(flight); } catch (error) { next(error); @@ -923,4 +933,13 @@ function isGRecordResultInvalid(res: Response, validationResult?: FaiResponse) { } return false; } + +async function retrieveFlightForAdmin(req: Request, res: Response) { + const flight = await FlightService.getByExternalId(+req.params.id, { + excludeSecrets: false, + }); + if (!flight) return res.sendStatus(NOT_FOUND); + res.json(flight); +} + export default router;