diff --git a/lib/api/controllers/feature-types.js b/lib/api/controllers/feature-types.js index eac6a6e..1e57f01 100644 --- a/lib/api/controllers/feature-types.js +++ b/lib/api/controllers/feature-types.js @@ -1,5 +1,3 @@ -'use strict' - const mongoose = require('mongoose') const {Http404} = require('../errors') @@ -8,21 +6,22 @@ const am = require('../middlewares/async') const FeatureType = mongoose.model('FeatureType') /* Middlewares */ -exports.featureType = (req, res, next, id) => { - FeatureType - .findOne({service: req.params.serviceId, name: id}) - .exec((err, featureType) => { - if (err) { - return next(err) - } - - if (!featureType) { - return next(new Http404()) - } - - req.featureType = featureType - next() - }) +exports.featureType = async (req, res, next, id) => { + try { + const featureType = await FeatureType.findOne({ + service: req.params.serviceId, + name: id + }).exec() + + if (!featureType) { + return next(new Http404()) + } + + req.featureType = featureType + next() + } catch (error) { + next(error) + } } /* Actions */ @@ -36,5 +35,8 @@ exports.list = am(async (req, res) => { }) exports.show = (req, res) => { - res.send(req.featureType) + res.send({ + ...req.featureType.toJSON(), + serviceLocation: req.service.location + }) } diff --git a/lib/api/index.js b/lib/api/index.js index e3d027c..5f234b2 100644 --- a/lib/api/index.js +++ b/lib/api/index.js @@ -4,7 +4,6 @@ const cors = require('cors') const sentry = require('../utils/sentry') const registerRecordsRoutes = require('./routes/records') -const registerServicesRoutes = require('./routes/services') const router = new Router() @@ -15,11 +14,11 @@ router.use(json()) router.use(require('./routes/publications')) registerRecordsRoutes(router) -registerServicesRoutes(router) router.use('/maintenance', require('./routes/maintenance')) router.use('/catalogs', require('./routes/catalogs')) router.use('/links', require('./routes/links')) +router.use('/services', require('./routes/services')) router.use(sentry.Handlers.errorHandler()) router.use((error, req, res, next) => { // eslint-disable-line no-unused-vars diff --git a/lib/api/routes/services.js b/lib/api/routes/services.js index 0f26bac..7569d3b 100644 --- a/lib/api/routes/services.js +++ b/lib/api/routes/services.js @@ -1,48 +1,35 @@ +const {Router} = require('express') + const services = require('../controllers/services') const featureTypes = require('../controllers/feature-types') const {TRANSCODER_URL} = process.env -module.exports = function (app) { - // Params - app.param('serviceId', services.service) - app.param('syncId', services.sync) - app.param('typeName', featureTypes.featureType) - - // Routes - app.route('/services') - .get(services.list) - .post(services.create) - - app.route('/services/by-protocol/:protocol') - .get(services.list) - - app.route('/services/:serviceId') - .get(services.show) +const router = new Router() - app.route('/services/:serviceId/sync') - .post(services.handleSync) +router.param('serviceId', services.service) +router.param('syncId', services.sync) +router.param('typeName', featureTypes.featureType) - app.route('/services/:serviceId/synchronizations') - .get(services.listSyncs) +router.get('/', services.list) +router.post('/', services.create) +router.get('/:serviceId', services.show) - app.route('/services/:serviceId/synchronizations/:syncId') - .get(services.showSync) +router.post('/:serviceId/sync', services.handleSync) - app.route('/services/by-protocol/:protocol/sync-all') - .post(services.syncAllByProtocol) +router.get('/:serviceId/synchronizations', services.listSyncs) +router.get('/:serviceId/synchronizations/:syncId', services.showSync) - app.route('/services/:serviceId/feature-types/:typeName') - .get(featureTypes.show) +router.get('/by-protocol/:protocol', services.list) +router.post('/by-protocol/:protocol/sync-all', services.syncAllByProtocol) - app.route('/services/:serviceId/feature-types/:typeName/download') - .get((req, res) => { - const {serviceId, typeName} = req.params - const {search} = req._parsedUrl +router.get('/:serviceId/feature-types', featureTypes.list) +router.get('/:serviceId/feature-types/:typeName', featureTypes.show) +router.get('/:serviceId/feature-types/:typeName/download', (req, res) => { + const {serviceId, typeName} = req.params + const {search} = req._parsedUrl - res.redirect(`${TRANSCODER_URL}/services/${serviceId}/feature-types/${typeName}${search}`) - }) + res.redirect(`${TRANSCODER_URL}/services/${serviceId}/feature-types/${typeName}${search}`) +}) - app.route('/services/:serviceId/feature-types') - .get(featureTypes.list) -} +module.exports = router