UNPKG

rest-in-contract

Version:

Rest API Contract. This module is the Contract Server nodejs module for `rest-in-contract` project.

97 lines (82 loc) 2.75 kB
'use strict' var express = require('express'); var { App, Wiretest } = require('./../models/models'); var { appServices, wiretestServices } = require('./../services/services'); var router = express.Router({ mergeParams: true }); var versionRouter = require('./version-router'); var wirestubRouter = require('./wirestub-router'); router.param('appId', async(req, res, next, appId) => { let [error, app] = (await appServices.get(appId)).get(); if (error) { return res.status(error.code).send(error.message); } else { req.params.app = app; return next(); } }); router.post('/', async(req, res) => { let app = App.newFromAttributes(req.body); let [error, appId, code, result] = (await appServices.create(app)).get(); if (appId) { res.set('location', `/api/v1/apps/${appId}`); res.status(201).send('App created'); } else { res.status(code).send(result.message); } }); router.put('/:appId', async(req, res) => { var appId = req.params.appId; var app = App.newFromAttributes(req.body); app.id = appId; var [error, originalApp] = (await appServices.get(appId)).get(); if (originalApp){ app.versions = originalApp.versions; } var [error, data, code, result] = (await appServices.update(app)).get(); if (!error) { res.status(204).send('No content'); } else { res.status(code).send(result.message); } }); router.delete('/:appId', async(req, res) => { let appId = req.params.appId; if (req.params.app) { let app = req.params.app; let [error, data, code, result] = (await appServices.delete(appId)).get(); if (!error) { res.status(204).send('No content'); } else { res.status(code).send(result.message); } } else { res.status(404).send('App not found'); } }); router.get('/', async(req, res) => { let [error, appIds, code] = (await appServices.get()).get(); res.send(appIds); }); router.get('/:appId', async(req, res) => { if (req.params.app) { let app = req.params.app; let hal = app.toHal(); res.set('content-type', 'application/json+hal') res.send(hal); } else { res.status(404).send('App not found'); } }); router.post('/:appId/wiretests', async(req, res) => { let wiretest = new Wiretest(req.body); let appId = req.params.appId; let [error, records, code] = (await wiretestServices.appWiretest(appId, wiretest)).get(); if (!error){ res.send(records); } else { res.error(error); } }); router.use('/:appId/versions', versionRouter); router.use('/:appId/wirestubs', wirestubRouter); module.exports = router