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.

102 lines (82 loc) 2.39 kB
'use strict'; var find_options = require('./query'); var consts = require('../constants'); function storage (collection, ctx) { var ObjectID = require('mongodb').ObjectID; function create (obj, fn) { obj.created_at = (new Date( )).toISOString( ); api().insert(obj, function (err, doc) { fn(null, doc); }); ctx.bus.emit('data-received'); } function save (obj, fn) { obj._id = new ObjectID(obj._id); if (!obj.created_at) { obj.created_at = (new Date( )).toISOString( ); } api().save(obj, function (err) { //id should be added for new docs fn(err, obj); }); ctx.bus.emit('data-received'); } function list (fn, count) { const limit = count !== null ? count : Number(consts.PROFILES_DEFAULT_COUNT); return api( ).find({ }).limit(limit).sort({startDate: -1}).toArray(fn); } function list_query (opts, fn) { storage.queryOpts = { walker: {} , dateField: 'startDate' }; function limit () { if (opts && opts.count) { return this.limit(parseInt(opts.count)); } return this; } return limit.call(api() .find(query_for(opts)) .sort(opts && opts.sort && query_sort(opts) || { startDate: -1 }), opts) .toArray(fn); } function query_for (opts) { var retVal = find_options(opts, storage.queryOpts); return retVal; } function query_sort (opts) { if (opts && opts.sort) { var sortKeys = Object.keys(opts.sort); for (var i = 0; i < sortKeys.length; i++) { if (opts.sort[sortKeys[i]] == '1') { opts.sort[sortKeys[i]] = 1; } else { opts.sort[sortKeys[i]] = -1; } } return opts.sort; } } function last (fn) { return api().find().sort({startDate: -1}).limit(1).toArray(fn); } function remove (_id, fn) { var objId = new ObjectID(_id); api( ).remove({ '_id': objId }, fn); ctx.bus.emit('data-received'); } function api () { return ctx.store.collection(collection); } api.list = list; api.list_query = list_query; api.create = create; api.save = save; api.remove = remove; api.last = last; api.indexedFields = ['startDate']; return api; } module.exports = storage;