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.
54 lines (38 loc) • 1.34 kB
JavaScript
;
const apiConst = require('../../const.json')
, security = require('../../security')
, validate = require('./validate.js')
, path = require('path')
, opTools = require('../../shared/operationTools')
;
/**
* Insert new document into the collection
* @param {Object} opCtx
* @param {Object} doc
*/
async function insert (opCtx, doc) {
const { ctx, auth, col, req, res } = opCtx;
await security.demandPermission(opCtx, `api:${col.colName}:create`);
if (validate(opCtx, doc) !== true)
return;
const now = new Date;
doc.srvModified = now.getTime();
doc.srvCreated = doc.srvModified;
if (auth && auth.subject && auth.subject.name) {
doc.subject = auth.subject.name;
}
const identifier = await col.storage.insertOne(doc);
if (!identifier)
throw new Error('empty identifier');
res.setHeader('Last-Modified', now.toUTCString());
res.setHeader('Location', path.posix.join(req.baseUrl, req.path, identifier));
const fields = {
identifier: identifier,
lastModified: now.getTime()
};
opTools.sendJSON({ res, status: apiConst.HTTP.CREATED, fields: fields });
ctx.bus.emit('storage-socket-create', { colName: col.colName, doc });
col.autoPrune();
ctx.bus.emit('data-received');
}
module.exports = insert;