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.
63 lines (46 loc) • 1.56 kB
JavaScript
;
const _ = require('lodash')
, apiConst = require('../../const.json')
, security = require('../../security')
, insert = require('./insert')
, replace = require('../update/replace')
, opTools = require('../../shared/operationTools')
;
/**
* CREATE: Inserts a new document into the collection
*/
async function create (opCtx) {
const { col, req, res } = opCtx;
const doc = req.body;
if (_.isEmpty(doc)) {
return opTools.sendJSONStatus(res, apiConst.HTTP.BAD_REQUEST, apiConst.MSG.HTTP_400_BAD_REQUEST_BODY);
}
col.parseDate(doc);
opTools.resolveIdentifier(doc);
const identifyingFilter = col.storage.identifyingFilter(doc.identifier, doc, col.dedupFallbackFields);
const result = await col.storage.findOneFilter(identifyingFilter, { });
if (!result)
throw new Error('empty result');
if (result.length > 0) {
const storageDoc = result[0];
await replace(opCtx, doc, storageDoc, { isDeduplication: true });
}
else {
await insert(opCtx, doc);
}
}
function createOperation (ctx, env, app, col) {
return async function operation (req, res) {
const opCtx = { app, ctx, env, col, req, res };
try {
opCtx.auth = await security.authenticate(opCtx);
await create(opCtx);
} catch (err) {
console.error(err);
if (!res.headersSent) {
return opTools.sendJSONStatus(res, apiConst.HTTP.INTERNAL_ERROR, apiConst.MSG.STORAGE_ERROR);
}
}
};
}
module.exports = createOperation;