r1296 - in wit/js: components services
Author: smaisonneuve Date: 2015-04-29 13:47:56 +0000 (Wed, 29 Apr 2015) New Revision: 1296 Url: http://forge.nuiton.org/projects/sandbox/repository/revisions/1296 Log: [Wit] - Database : fix search on logs Modified: wit/js/components/FilterBar.js wit/js/components/FilterLogs.js wit/js/services/database.js Modified: wit/js/components/FilterBar.js =================================================================== --- wit/js/components/FilterBar.js 2015-04-29 12:41:19 UTC (rev 1295) +++ wit/js/components/FilterBar.js 2015-04-29 13:47:56 UTC (rev 1296) @@ -20,10 +20,10 @@ var moment = require('moment'); var db = require("./js/services/database.js"); - var beginDate = moment(React.findDOMNode(this.refs.beginDate).value).toDate(); - var endDate = moment(React.findDOMNode(this.refs.endDate).value).toDate(); + var beginDate = moment(React.findDOMNode(this.refs.beginDate).value); + var endDate = moment(React.findDOMNode(this.refs.endDate).value); - return db.searchLogs(null, beginDate); + return db.searchLogs(null, beginDate, endDate, true); }, onSearch: function() { Modified: wit/js/components/FilterLogs.js =================================================================== --- wit/js/components/FilterLogs.js 2015-04-29 12:41:19 UTC (rev 1295) +++ wit/js/components/FilterLogs.js 2015-04-29 13:47:56 UTC (rev 1296) @@ -37,7 +37,7 @@ var items = this.props.data.map(function(log) { - var diff = moment(moment(log.endDate).diff(log.startDate)).utcOffset(0); + var diff = moment(log.endDate.diff(log.startDate)).utcOffset(0); return ( <tr> Modified: wit/js/services/database.js =================================================================== --- wit/js/services/database.js 2015-04-29 12:41:19 UTC (rev 1295) +++ wit/js/services/database.js 2015-04-29 13:47:56 UTC (rev 1296) @@ -1,3 +1,4 @@ +var moment = require('moment'); var pjson = require('../../package.json'); var dbFileNamePrefix = pjson.dbFileNamePrefix; @@ -14,11 +15,14 @@ *********************/ exports.insertLog = function(tags, startDate, endDate) { + var m1 = startDate && moment(startDate), + m2 = endDate && moment(endDate); + return new Promise(function(resolve, reject) { db.logs.insert({ tags: tags, - startDate: startDate.getTime(), - endDate: endDate.getTime() + startDate: m1.valueOf(), + endDate: m2.valueOf() }, function(err, newDocs) { if (!err) { resolve(newDocs); @@ -28,17 +32,39 @@ }); }); }; - -exports.searchLogs = function(tags, startDate, endDate) { + +/** + * Search for logs in the database + * @param {type} tags + * @param {type} startDate + * @param {type} endDate + * @param {type} truncate + * @returns {Promise} + */ +exports.searchLogs = function(tags, startDate, endDate, truncate) { var query = {}; + var m1 = startDate && moment(startDate), + m2 = endDate && moment(endDate); if (tags) { query.tags = { $in: tags }; } - if (startDate) { query.startDate = { $gte: startDate.getTime() } } - if (endDate) { query.endDate = { $lte: endDate.getTime() } } + if (m1) { query.endDate = { $gte : m1.valueOf() }; } + if (m2) { query.startDate = { $lte: m2.valueOf() }; } return new Promise(function(resolve, reject) { db.logs.find(query).sort({ startDate: -1 }).exec(function(err, docs) { if (!err) { + + // Process results : + // - convert timestamp to moment (easier to use) + // - tuncate periods to fit search dates params if required + + _convertLogs(docs); + + if (truncate && docs.length) { + _normalize(docs[0], m1, m2); + _normalize(docs[docs.length - 1], m1, m2); + } + resolve(docs); } else { reject(err); @@ -52,7 +78,7 @@ return new Promise(function(resolve, reject) { db.logs.find({}).sort({ startDate: -1 }).skip(index).limit(1).exec(function (err, docs) { if (!err) { - resolve(docs); + resolve(_convertLogs(docs)); } else { reject(err); } @@ -128,3 +154,31 @@ }); }; + +/************ + * Utilities + ************/ +var _convertLogs = function (docs) { + return docs.forEach(function (d) { + d.startDate = moment(d.startDate); + d.endDate = moment(d.endDate); + }); +}; + +var _normalize = function (period, startDate, endDate) { + var pStartDate = period.startDate && moment(period.startDate), + pEndDate = period.endDate && moment(period.endDate); + + var m1 = startDate && moment(startDate), + m2 = endDate && moment(endDate); + + if (m1 && pStartDate && pStartDate.isBefore(m1)) { + period.startDate = m1; + } + + if (m2 && pEndDate && pEndDate.isAfter(m2)) { + period.endDate = m2; + } + + return period; +};
participants (1)
-
smaisonneuveďź users.nuiton.org