getImage.js 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. 'use strict'
  2. import express from 'express'
  3. import boom from 'boom'
  4. import { imageServedUrl } from '../../config'
  5. import { asyncMiddleware, checkSceneName, checkRequiredParameters, getSceneFilesData } from '../functions'
  6. const router = express.Router()
  7. router.get('/', asyncMiddleware(async (req, res) => {
  8. // Check the request contains all the required parameters
  9. checkRequiredParameters(['sceneName', 'imageQuality'], req.query)
  10. const { sceneName, imageQuality } = req.query
  11. let errorList = []
  12. // Check the scene name is valid
  13. try {
  14. checkSceneName(sceneName)
  15. }
  16. catch (err) {
  17. errorList.push(err)
  18. }
  19. // Check `imageQuality` is an integer
  20. const qualityInt = parseInt(imageQuality, 10)
  21. if (isNaN(qualityInt)) errorList.push('The specified quality is not an integer.')
  22. // Check there is no errors with parameters
  23. if (errorList.length > 0)
  24. throw boom.badRequest('Invalid query parameter(s).', errorList)
  25. const sceneData = await getSceneFilesData(sceneName)
  26. // Search an image with the requested quality in the scene
  27. for (const [imageName, imageData] of sceneData.entries()) {
  28. if (qualityInt === imageData.quality)
  29. return res.json({ link: `${imageServedUrl}/${sceneName}/${imageName}` })
  30. }
  31. throw boom.notFound(`The requested quality (${imageQuality}) was not found for the requested scene (${sceneName}).`)
  32. }))
  33. export default router