Merge branch 'hotfix/21.56.9' into master
[gitter.git] / modules / events / lib / event-service.js
blob0eed0f21a4d9dc5d501a8e0b8488e42d0477f88a
1 'use strict';
3 const assert = require('assert');
4 var persistence = require('gitter-web-persistence');
5 var processText = require('gitter-web-text-processor');
6 var ObjectID = require('mongodb').ObjectID;
7 var Promise = require('bluebird');
8 var StatusError = require('statuserror');
9 const mongoUtils = require('gitter-web-persistence-utils/lib/mongo-utils');
10 const mongoReadPrefs = require('gitter-web-persistence-utils/lib/mongo-read-prefs');
12 /**
13  * For exporting things
14  */
15 function getCursorByRoomId(roomId) {
16   assert(mongoUtils.isLikeObjectId(roomId));
18   const cursor = persistence.Event.find({
19     toTroupeId: roomId
20   })
21     .lean()
22     .read(mongoReadPrefs.secondaryPreferred)
23     .batchSize(100)
24     .cursor();
26   return cursor;
29 function newEventToTroupe(troupe, user, text, meta, payload, callback) {
30   text = text ? '' + text : '';
32   return Promise.try(function() {
33     if (!troupe) throw new StatusError(500, 'Invalid troupe');
34     if (!text) throw new StatusError(400, 'Text required');
36     return processText(text);
37   })
38     .then(function(parsed) {
39       var event = new persistence.Event();
41       event.fromUserId = user ? user.id : null;
42       event.toTroupeId = troupe.id;
43       event.sent = new Date();
44       event.text = text;
45       event.html = parsed.html;
46       event.meta = meta;
47       event.payload = payload;
49       return event.save();
50     })
51     .nodeify(callback);
54 function findEventsForTroupe(troupeId, options, callback) {
55   var q = persistence.Event.where('toTroupeId', troupeId);
57   if (options.startId) {
58     var startId = new ObjectID(options.startId);
59     q = q.where('_id').gte(startId);
60   }
62   if (options.beforeId) {
63     var beforeId = new ObjectID(options.beforeId);
64     q = q.where('_id').lt(beforeId);
65   }
67   return q
68     .sort(options.sort || { sent: 'desc' })
69     .limit(options.limit || 20)
70     .skip(options.skip || 0)
71     .exec()
72     .then(function(results) {
73       return results;
74     })
75     .nodeify(callback);
78 module.exports = {
79   getCursorByRoomId,
80   newEventToTroupe,
81   findEventsForTroupe