1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- 'use strict'
- import express from 'express'
- import boom from 'boom'
- import { imageServedUrl } from '../../config'
- import { asyncMiddleware, checkSceneName, checkRequiredParameters, getSceneFilesData } from '../functions'
- const router = express.Router()
- router.get('/', asyncMiddleware(async (req, res) => {
- // Check the request contains all the required parameters
- checkRequiredParameters(['sceneName', 'imageQuality'], req.query)
- const { sceneName, imageQuality } = req.query
- let errorList = []
- // Check the scene name is valid
- try {
- checkSceneName(sceneName)
- }
- catch (err) {
- errorList.push(err.message)
- }
- // Check `imageQuality` is an integer
- const qualityInt = parseInt(imageQuality, 10)
- if (isNaN(qualityInt)) errorList.push('The specified quality is not an integer.')
- // Check there is no errors with parameters
- if (errorList.length > 0)
- throw boom.badRequest('Invalid query parameter(s).', errorList)
- const sceneData = await getSceneFilesData(sceneName)
- // Search an image with the requested quality in the scene
- for (const [imageName, imageData] of sceneData.entries()) {
- if (qualityInt === imageData.quality)
- return res.json({ link: `${imageServedUrl}/${sceneName}/${imageName}` })
- }
- throw boom.notFound(`The requested quality (${imageQuality}) was not found for the requested scene (${sceneName}).`)
- }))
- export default router
|