UNPKG

nightscout

Version:

Nightscout acts as a web-based CGM (Continuous Glucose Monitor) to allow multiple caregivers to remotely view a patients glucose data in realtime.

110 lines (89 loc) 3.71 kB
'use strict'; var consts = require('../../constants'); function configure (app, wares, ctx) { var express = require('express'), api = express.Router( ); // invoke common middleware api.use(wares.sendJSONStatus); // text body types get handled as raw buffer stream api.use(wares.rawParser); // json body types get handled as parsed json api.use(wares.jsonParser); // also support url-encoded content-type api.use(wares.urlencodedParser); // text body types get handled as raw buffer stream api.use(ctx.authorization.isPermitted('api:profile:read')); /** * @function query_models * Perform the standard query logic, translating API parameters into mongo * db queries in a fairly regimented manner. * This middleware executes the query, returning the results as JSON */ function query_models (req, res, next) { var query = req.query; // If "?count=" is present, use that number to decide how many to return. if (!query.count) { query.count = consts.PROFILES_DEFAULT_COUNT; } // perform the query ctx.profile.list_query(query, function payload(err, profiles) { return res.json(profiles); }); } // List profiles available api.get('/profiles/', query_models); // List profiles available api.get('/profile/', function(req, res) { const limit = req.query && req.query.count ? Number(req.query.count) : consts.PROFILES_DEFAULT_COUNT; ctx.profile.list(function (err, attribute) { return res.json(attribute); }, limit); }); // List current active record (in current state LAST record is current active) api.get('/profile/current', function(req, res) { ctx.profile.last( function(err, records) { return res.json(records.length > 0 ? records[0] : null); }); }); function config_authed (app, api, wares, ctx) { // create new record api.post('/profile/', ctx.authorization.isPermitted('api:profile:create'), function(req, res) { var data = req.body; ctx.purifier.purifyObject(data); ctx.profile.create(data, function (err, created) { if (err) { res.sendJSONStatus(res, consts.HTTP_INTERNAL_ERROR, 'Mongo Error', err); console.log('Error creating profile'); console.log(err); } else { res.json(created.ops); console.log('Profile created', created); } }); }); // update record api.put('/profile/', ctx.authorization.isPermitted('api:profile:update'), function(req, res) { var data = req.body; ctx.profile.save(data, function (err, created) { if (err) { res.sendJSONStatus(res, consts.HTTP_INTERNAL_ERROR, 'Mongo Error', err); console.log('Error saving profile'); console.log(err); } else { res.json(created); console.log('Profile saved', created); } }); }); api.delete('/profile/:_id', ctx.authorization.isPermitted('api:profile:delete'), function(req, res) { ctx.profile.remove(req.params._id, function ( ) { res.json({ }); }); }); } if (app.enabled('api')) { config_authed(app, api, wares, ctx); } return api; } module.exports = configure;