@tiledesk/tiledesk-server 2.2.37 → 2.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/CHANGELOG.md +8 -1
  2. package/LICENSE +14 -657
  3. package/README.md +21 -18
  4. package/app.js +27 -3
  5. package/config/labels/widget.json +320 -0
  6. package/event/subscriptionEvent.js +11 -0
  7. package/models/subscriptionEvent.js +11 -0
  8. package/models/subscriptionLog.js +34 -0
  9. package/models/tagLibrary.js +42 -0
  10. package/package.json +5 -11
  11. package/pubmodules/activities/activityArchiver.js +295 -0
  12. package/pubmodules/activities/index.js +3 -0
  13. package/pubmodules/activities/models/activity.js +88 -0
  14. package/pubmodules/activities/routes/activity.js +710 -0
  15. package/pubmodules/activities/test/activityRoute.js +85 -0
  16. package/pubmodules/analytics/analytics.js +1719 -0
  17. package/pubmodules/analytics/index.js +3 -0
  18. package/pubmodules/canned/cannedResponse.js +51 -0
  19. package/pubmodules/canned/cannedResponseRoute.js +157 -0
  20. package/pubmodules/canned/index.js +3 -0
  21. package/pubmodules/pubModulesManager.js +115 -7
  22. package/pubmodules/rasa/index.js +8 -1
  23. package/pubmodules/rasa/listener.js +28 -7
  24. package/pubmodules/scheduler/tasks/closeBotUnresponsiveRequestTask.js +2 -2
  25. package/pubmodules/trigger/default.js +271 -0
  26. package/pubmodules/trigger/event/actionEventEmitter.js +10 -0
  27. package/pubmodules/trigger/event/flowEventEmitter.js +10 -0
  28. package/pubmodules/trigger/event/triggerEventEmitter.js +10 -0
  29. package/pubmodules/trigger/index.js +3 -0
  30. package/pubmodules/trigger/models/trigger.js +149 -0
  31. package/pubmodules/trigger/rulesTrigger.js +1180 -0
  32. package/pubmodules/trigger/start.js +114 -0
  33. package/pubmodules/trigger/triggerRoute.js +150 -0
  34. package/routes/department.js +51 -0
  35. package/routes/group.js +140 -0
  36. package/routes/project.js +52 -0
  37. package/routes/request.js +3 -2
  38. package/routes/subscription.js +140 -0
  39. package/routes/tag.js +138 -0
  40. package/services/faqBotHandler.js +2 -2
  41. package/services/faqBotSupport.js +0 -1
  42. package/services/faqService.js +1 -1
  43. package/services/modulesManager.js +16 -182
  44. package/services/subscriptionNotifier.js +485 -0
  45. package/template/email/assignedEmailMessage.html +1 -1
  46. package/template/email/assignedRequest.html +1 -1
  47. package/template/email/newMessage.html +1 -1
  48. package/template/email/passwordChanged.html +1 -1
  49. package/template/email/pooledEmailMessage.html +1 -1
  50. package/template/email/pooledRequest.html +1 -1
  51. package/template/email/resetPassword.html +2 -2
  52. package/template/email/ticket.html +1 -1
  53. package/views/messages.jade +1 -1
@@ -0,0 +1,114 @@
1
+ var faqService = require('../../services/faqService');
2
+ var Trigger = require('./models/trigger');
3
+ var DefaultTrigger = require('./default');
4
+ var projectEvent = require('../../event/projectEvent');
5
+ var winston = require('../../config/winston');
6
+
7
+ var rulesTrigger = require('./rulesTrigger');
8
+
9
+
10
+ function saveTrigger(trigger) {
11
+ trigger.save(function (err, savedTrigger) {
12
+ if (err) {
13
+ return winston.error("Error saving trigger for project with id "+trigger.id_project , err);
14
+ }
15
+ return winston.debug("Trigger saved for project with id "+trigger.id_project, saveTrigger);
16
+ });
17
+ }
18
+ projectEvent.on('project.create', async (project) => {
19
+ setImmediate( async () => {
20
+
21
+
22
+
23
+ var botIdentity = await faqService.create("Bot", undefined, project._id, "system", "identity", "An identity bot");
24
+ var botIdentityId = "bot_"+botIdentity.id;
25
+ winston.debug("botIdentityId:"+botIdentityId);
26
+
27
+
28
+ winston.debug("DefaultTrigger.defTriggerObj.s_new_conversation_01",DefaultTrigger.defTriggerObj.s_new_conversation_01._id);
29
+
30
+ let s_new_conversation_01 = Object.assign({}, DefaultTrigger.defTriggerObj.s_new_conversation_01);
31
+ s_new_conversation_01.id_project = project._id;
32
+ winston.debug("s_new_conversation_01",s_new_conversation_01);
33
+ let s_new_conversation_01Trigger = new Trigger(s_new_conversation_01);
34
+ saveTrigger(s_new_conversation_01Trigger);
35
+
36
+
37
+
38
+ // let s_proactive_greeting_01 = Object.assign({}, DefaultTrigger.defTriggerObj.s_proactive_greeting_01);
39
+ // s_proactive_greeting_01.id_project = project._id;
40
+ // let s_proactive_greeting_01Trigger = new Trigger(s_proactive_greeting_01);
41
+ // saveTrigger(s_proactive_greeting_01Trigger);
42
+
43
+
44
+ let s_online_welcome_01 = Object.assign({}, DefaultTrigger.defTriggerObj.s_online_welcome_01);
45
+ s_online_welcome_01.id_project = project._id;
46
+ s_online_welcome_01.actions[0].parameters.sender = botIdentityId;
47
+ let s_online_welcome_01Trigger = new Trigger(s_online_welcome_01);
48
+ saveTrigger(s_online_welcome_01Trigger);
49
+
50
+ let s_offline_welcome_01 = Object.assign({}, DefaultTrigger.defTriggerObj.s_offline_welcome_01);
51
+ s_offline_welcome_01.id_project = project._id;
52
+ s_offline_welcome_01.actions[0].parameters.sender = botIdentityId;
53
+ let s_offline_welcome_01Trigger = new Trigger(s_offline_welcome_01);
54
+ saveTrigger(s_offline_welcome_01Trigger);
55
+
56
+
57
+ let s_closed_operating_hours_01 = Object.assign({}, DefaultTrigger.defTriggerObj.s_closed_operating_hours_01);
58
+ s_closed_operating_hours_01.id_project = project._id;
59
+ s_closed_operating_hours_01.actions[0].parameters.sender = botIdentityId;
60
+ let s_closed_operating_hours_01Trigger = new Trigger(s_closed_operating_hours_01);
61
+ saveTrigger(s_closed_operating_hours_01Trigger);
62
+
63
+
64
+ let s_invite_bot_01 = Object.assign({}, DefaultTrigger.defTriggerObj.s_invite_bot_01);
65
+ s_invite_bot_01.id_project = project._id;
66
+ let s_invite_bot_01Trigger = new Trigger(s_invite_bot_01);
67
+ saveTrigger(s_invite_bot_01Trigger);
68
+
69
+
70
+ let s_checkout_page_01 = Object.assign({}, DefaultTrigger.defTriggerObj.s_checkout_page_01);
71
+ s_checkout_page_01.id_project = project._id;
72
+ s_checkout_page_01.actions[0].parameters.sender = botIdentityId;
73
+ let s_checkout_page_01Trigger = new Trigger(s_checkout_page_01);
74
+ saveTrigger(s_checkout_page_01Trigger);
75
+
76
+
77
+ let s_ticketing_taking_01 = Object.assign({}, DefaultTrigger.defTriggerObj.s_ticketing_taking_01);
78
+ s_ticketing_taking_01.id_project = project._id;
79
+ s_ticketing_taking_01.actions[0].parameters.sender = botIdentityId;
80
+ let s_ticketing_taking_01Trigger = new Trigger(s_ticketing_taking_01);
81
+ saveTrigger(s_ticketing_taking_01Trigger);
82
+
83
+
84
+
85
+ //DIABLED
86
+ /*
87
+ let s_new_login_01 = Object.assign({}, DefaultTrigger.defTriggerObj.s_new_login_01);
88
+ s_new_login_01.id_project = project._id;
89
+ let s_new_login_01Trigger = new Trigger(s_new_login_01);
90
+ saveTrigger(s_new_login_01Trigger);
91
+
92
+ let s_invite_proactive_greeting_bot_01 = Object.assign({}, DefaultTrigger.defTriggerObj.s_invite_proactive_greeting_bot_01);
93
+ s_invite_proactive_greeting_bot_01.id_project = project._id;
94
+ let s_invite_proactive_greeting_bot_01Trigger = new Trigger(s_invite_proactive_greeting_bot_01);
95
+ saveTrigger(s_invite_proactive_greeting_bot_01Trigger);
96
+
97
+ let s_proactivegreeting_message_01 = Object.assign({}, DefaultTrigger.defTriggerObj.s_proactivegreeting_message_01);
98
+ s_proactivegreeting_message_01.id_project = project._id;
99
+ s_proactivegreeting_message_01.actions[0].parameters.sender = botIdentityId;
100
+ let s_proactivegreeting_message_01Trigger = new Trigger(s_proactivegreeting_message_01);
101
+ saveTrigger(s_proactivegreeting_message_01Trigger);
102
+ */
103
+
104
+
105
+ winston.info("triggers created for new project");
106
+
107
+
108
+ });
109
+ });
110
+
111
+ rulesTrigger.listen();
112
+
113
+
114
+
@@ -0,0 +1,150 @@
1
+ var express = require('express');
2
+ var router = express.Router();
3
+ var Trigger = require("./models/trigger");
4
+ var triggerEventEmitter = require("./event/triggerEventEmitter");
5
+ var DefaultTrigger = require('./default');
6
+
7
+ var winston = require('../../config/winston');
8
+
9
+
10
+ winston.debug("trigger route");
11
+
12
+ router.post('/', function (req, res) {
13
+
14
+ winston.debug(req.body);
15
+
16
+ var trigger = new Trigger({
17
+ name: req.body.name,
18
+ description: req.body.description,
19
+ id_project: req.projectid,
20
+ trigger: req.body.trigger,
21
+ conditions: req.body.conditions,
22
+ actions: req.body.actions,
23
+ enabled:true,
24
+ createdBy: req.user.id,
25
+ updatedBy: req.user.id
26
+ });
27
+
28
+ trigger.save(function (err, savedTrigger) {
29
+ if (err) {
30
+ winston.error('--- > ERROR ', err);
31
+ return res.status(500).send({ success: false, msg: 'Error saving object.' });
32
+ }
33
+
34
+ triggerEventEmitter.emit('trigger.create', savedTrigger);
35
+
36
+ res.json(savedTrigger);
37
+ });
38
+ });
39
+
40
+ router.put('/:triggerid', function (req, res) {
41
+
42
+ winston.debug(req.body);
43
+
44
+
45
+ var update = {};
46
+ update.name = req.body.name;
47
+ update.description = req.body.description;
48
+ update.trigger = req.body.trigger;
49
+ update.conditions = req.body.conditions;
50
+
51
+ update.actions = req.body.actions;
52
+ update.enabled = req.body.enabled;
53
+ update.id_project = req.projectid;
54
+ update.updatedBy = req.user.id;
55
+
56
+
57
+ Trigger.findByIdAndUpdate(req.params.triggerid, update, { new: true, upsert: true }, function (err, updatedTrigger) {
58
+ if (err) {
59
+ winston.error('--- > ERROR ', err);
60
+ return res.status(500).send({ success: false, msg: 'Error updating object.' });
61
+ }
62
+
63
+ triggerEventEmitter.emit('trigger.update', updatedTrigger);
64
+
65
+ res.json(updatedTrigger);
66
+ });
67
+ });
68
+
69
+ // curl -v -X PUT -H 'Content-Type:application/json' -u andrea.leo@f21.it:123456 http://localhost:3000/5e9eca85696a55a7eb4615f2/modules/triggers/s_invite_bot_01/reset
70
+
71
+ router.put('/:triggercode/reset', function (req, res) {
72
+
73
+ winston.debug(req.body);
74
+
75
+ var query = {code:req.params.triggercode, id_project: req.projectid};
76
+ winston.verbose("query resetting trigger: " , query);
77
+
78
+
79
+ let triggerObj = Object.assign({}, DefaultTrigger.defTrigger[req.params.triggercode].toJSON());
80
+ triggerObj.id_project = req.projectid;
81
+
82
+ winston.verbose("reset triggerObj: " ,triggerObj);
83
+
84
+ let trigger = new Trigger(triggerObj);
85
+ // var trigger = DefaultTrigger.defTrigger[req.params.triggercode];
86
+ // winston.verbose("trigger: ", trigger.toJSON());
87
+
88
+ Trigger.remove(query, function (errOld, triggerOld) {
89
+ if (errOld) {
90
+ winston.error('Error deleting trigger ', errOld);
91
+ // return res.status(500).send({ success: false, msg: 'Error deleting object.' });
92
+ }
93
+ trigger.save(function (err, updatedTrigger) {
94
+ if (err) {
95
+ winston.error('--- > ERROR ', {triggerObj:triggerObj, err: err, query: query});
96
+ return res.status(500).send({ success: false, msg: 'Error updating object.' });
97
+ }
98
+ triggerEventEmitter.emit('trigger.update', updatedTrigger);
99
+ res.json(updatedTrigger);
100
+ });
101
+ });
102
+
103
+
104
+ });
105
+
106
+
107
+
108
+ router.delete('/:triggerid', function (req, res) {
109
+
110
+ winston.debug(req.body);
111
+
112
+ Trigger.remove({ _id: req.params.triggerid }, function (err, trigger) {
113
+ if (err) {
114
+ winston.error('--- > ERROR ', err);
115
+ return res.status(500).send({ success: false, msg: 'Error deleting object.' });
116
+ }
117
+ triggerEventEmitter.emit('trigger.delete', trigger);
118
+
119
+ res.json(trigger);
120
+ });
121
+ });
122
+
123
+
124
+ router.get('/:triggerid', function (req, res) {
125
+
126
+ winston.debug(req.body);
127
+
128
+ Trigger.findById(req.params.triggerid, function (err, trigger) {
129
+ if (err) {
130
+ winston.error('--- > ERROR ', err)
131
+ return res.status(500).send({ success: false, msg: 'Error getting object.' });
132
+ }
133
+ if (!trigger) {
134
+ return res.status(404).send({ success: false, msg: 'Object not found.' });
135
+ }
136
+ res.json(trigger);
137
+ });
138
+ });
139
+
140
+
141
+
142
+ router.get('/', function (req, res) {
143
+
144
+ Trigger.find({ "id_project": req.projectid }, function (err, triggers) {
145
+ if (err) return next(err);
146
+ res.json(triggers);
147
+ });
148
+ });
149
+
150
+ module.exports = router;
@@ -14,6 +14,40 @@ var cacheUtil = require('../utils/cacheUtil');
14
14
  var departmentEvent = require("../event/departmentEvent");
15
15
 
16
16
 
17
+ router.post('/', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRole('admin')], function (req, res) {
18
+
19
+ winston.debug("DEPT REQ BODY ", req.body);
20
+ var newDepartment = new Department({
21
+ routing: req.body.routing,
22
+ name: req.body.name,
23
+ description: req.body.description,
24
+ default: req.body.default,
25
+ status: req.body.status,
26
+ id_group: req.body.id_group,
27
+ id_project: req.projectid,
28
+ createdBy: req.user.id,
29
+ updatedBy: req.user.id
30
+ });
31
+
32
+ if (req.body.id_bot) {
33
+ newDepartment.id_bot = req.body.id_bot;
34
+ newDepartment.bot_only = req.body.bot_only;
35
+ }
36
+
37
+
38
+ newDepartment.save(function (err, savedDepartment) {
39
+ if (err) {
40
+ winston.error('Error creating the department ', err);
41
+ return res.status(500).send({ success: false, msg: 'Error saving object.' });
42
+ }
43
+ winston.debug('NEW DEPT SAVED ', savedDepartment);
44
+ departmentEvent.emit('department.create', savedDepartment);
45
+ res.json(savedDepartment);
46
+ });
47
+ });
48
+
49
+
50
+
17
51
  router.put('/:departmentid', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRole('admin')], function (req, res) {
18
52
 
19
53
  winston.debug(req.body);
@@ -265,6 +299,23 @@ router.get('/', function (req, res) {
265
299
  }
266
300
  });
267
301
 
302
+ router.delete('/:departmentid', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRole('admin')], function (req, res) {
303
+
304
+ winston.debug(req.body);
305
+ winston.debug("req.params.departmentid: "+req.params.departmentid);
306
+
307
+ Department.findOneAndRemove({_id: req.params.departmentid}, function (err, department) {
308
+ // Department.remove({ _id: req.params.departmentid }, function (err, department) {
309
+
310
+ if (err) {
311
+ winston.error('Error deleting the department ', err);
312
+ return res.status(500).send({ success: false, msg: 'Error deleting object.' });
313
+ }
314
+ // nn funziuona perchje nn c'è id_project
315
+ departmentEvent.emit('department.delete', department);
316
+ res.json(department);
317
+ });
318
+ });
268
319
 
269
320
 
270
321
  module.exports = router;
@@ -0,0 +1,140 @@
1
+ var express = require('express');
2
+ var router = express.Router();
3
+ var Group = require("../models/group");
4
+ var groupEvent = require("../event/groupEvent");
5
+ var winston = require('../config/winston');
6
+
7
+
8
+
9
+ router.post('/', function (req, res) {
10
+
11
+ winston.debug('SAVE GROUP ', req.body);
12
+ var newGroup = new Group({
13
+ name: req.body.name,
14
+ members: req.body.members,
15
+ trashed: false,
16
+ id_project: req.projectid,
17
+ createdBy: req.user.id,
18
+ updatedBy: req.user.id
19
+ });
20
+
21
+ newGroup.save(function (err, savedGroup) {
22
+ if (err) {
23
+ winston.error('Error creating the group ', err);
24
+ return res.status(500).send({ success: false, msg: 'Error saving object.' });
25
+ }
26
+
27
+
28
+ groupEvent.emit('group.create', savedGroup);
29
+ res.json(savedGroup);
30
+ });
31
+ });
32
+
33
+ router.put('/:groupid', function (req, res) {
34
+
35
+ winston.debug(req.body);
36
+
37
+ var update = {};
38
+ if (req.body.name!=undefined) {
39
+ update.name = req.body.name;
40
+ }
41
+ if (req.body.members!=undefined) {
42
+ update.members = req.body.members;
43
+ }
44
+ if (req.body.trashed!=undefined) {
45
+ update.trashed = req.body.trashed;
46
+ }
47
+
48
+
49
+ Group.findByIdAndUpdate(req.params.groupid, update, { new: true, upsert: true }, function (err, updatedGroup) {
50
+ if (err) {
51
+ winston.error('Error putting the group ', err);
52
+ return res.status(500).send({ success: false, msg: 'Error updating object.' });
53
+ }
54
+
55
+ groupEvent.emit('group.update', updatedGroup);
56
+ res.json(updatedGroup);
57
+ });
58
+ });
59
+
60
+ // router.put('/:groupid', function (req, res) {
61
+
62
+ // winston.debug(req.body);
63
+
64
+ // var update = {};
65
+
66
+ // update.name = req.body.name;
67
+ // update.members = req.body.members;
68
+ // update.trashed = req.body.trashed;
69
+
70
+
71
+ // Group.findByIdAndUpdate(req.params.groupid, update, { new: true, upsert: true }, function (err, updatedGroup) {
72
+ // if (err) {
73
+ // winston.error('Error putting the group ', err);
74
+ // return res.status(500).send({ success: false, msg: 'Error updating object.' });
75
+ // }
76
+
77
+ // groupEvent.emit('group.update', updatedGroup);
78
+ // res.json(updatedGroup);
79
+ // });
80
+ // });
81
+
82
+ router.delete('/:groupid', function (req, res) {
83
+
84
+ winston.debug(req.body);
85
+
86
+ Group.findOneAndRemove({_id: req.params.groupid}, function (err, group) {
87
+ // Group.remove({ _id: req.params.groupid }, function (err, group) {
88
+ if (err) {
89
+ winston.error('Error removing the group ', err);
90
+ return res.status(500).send({ success: false, msg: 'Error deleting object.' });
91
+ }
92
+ // nn funziuona perchje nn c'è id_project
93
+ groupEvent.emit('group.delete', group);
94
+
95
+ res.json(group);
96
+ });
97
+ });
98
+
99
+
100
+ router.get('/:groupid', function (req, res) {
101
+
102
+ winston.debug(req.body);
103
+
104
+ Group.findById(req.params.groupid, function (err, group) {
105
+ if (err) {
106
+ winston.error('Error getting the group ', err);
107
+ return res.status(500).send({ success: false, msg: 'Error getting object.' });
108
+ }
109
+ if (!group) {
110
+ winston.warn('group not found', err);
111
+ return res.status(404).send({ success: false, msg: 'Object not found.' });
112
+ }
113
+ res.json(group);
114
+ });
115
+ });
116
+
117
+
118
+
119
+ router.get('/', function (req, res) {
120
+
121
+ winston.debug("req projectid", req.projectid);
122
+
123
+ var query = { "id_project": req.projectid, trashed: false };
124
+
125
+ if (req.query.member) {
126
+ query.members = { $in : req.query.member }
127
+ }
128
+
129
+ winston.debug("query", query);
130
+
131
+ Group.find(query, function (err, groups) {
132
+ if (err) {
133
+ winston.error('Error getting the group ', err);
134
+ return next(err);
135
+ }
136
+ res.json(groups);
137
+ });
138
+ });
139
+
140
+ module.exports = router;
package/routes/project.js CHANGED
@@ -2,6 +2,8 @@ var express = require('express');
2
2
  var router = express.Router();
3
3
  var Project = require("../models/project");
4
4
  var projectEvent = require("../event/projectEvent");
5
+ var projectService = require("../services/projectService");
6
+
5
7
  var Project_user = require("../models/project_user");
6
8
 
7
9
  var operatingHoursService = require("../services/operatingHoursService");
@@ -17,6 +19,56 @@ var RoleConstants = require("../models/roleConstants");
17
19
  var cacheUtil = require('../utils/cacheUtil');
18
20
  var orgUtil = require("../utils/orgUtil");
19
21
 
22
+
23
+ router.post('/', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken], async (req, res) => {
24
+
25
+ // create(name, createdBy, settings)
26
+ return projectService.create(req.body.name, req.user.id, undefined, req.body.defaultLanguage).then(function(savedProject) {
27
+ res.json(savedProject);
28
+ });
29
+
30
+ });
31
+
32
+ // DOWNGRADE PLAN. UNUSED
33
+ router.put('/:projectid/downgradeplan', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRole('owner')], function (req, res) {
34
+ winston.debug('downgradeplan - UPDATE PROJECT REQ BODY ', req.body);
35
+ Project.findByIdAndUpdate(req.params.projectid, req.body, { new: true, upsert: true }, function (err, updatedProject) {
36
+ if (err) {
37
+ winston.error('Error putting project ', err);
38
+ return res.status(500).send({ success: false, msg: 'Error updating object.' });
39
+ }
40
+ projectEvent.emit('project.downgrade', updatedProject );
41
+ res.json(updatedProject);
42
+ });
43
+ });
44
+
45
+
46
+ router.delete('/:projectid/physical', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRole('owner')], function (req, res) {
47
+ winston.debug(req.body);
48
+ // TODO delete also department, faq_kb, faq, group, label, lead, message, project_users, requests, subscription
49
+ Project.remove({ _id: req.params.projectid }, function (err, project) {
50
+ if (err) {
51
+ winston.error('Error deleting project ', err);
52
+ return res.status(500).send({ success: false, msg: 'Error deleting object.' });
53
+ }
54
+ projectEvent.emit('project.delete', project );
55
+ res.json(project);
56
+ });
57
+ });
58
+
59
+ router.delete('/:projectid', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRole('owner')], function (req, res) {
60
+ winston.debug(req.body);
61
+ // TODO delete also department, faq_kb, faq, group, label, lead, message, project_users, requests, subscription
62
+ Project.findByIdAndUpdate(req.params.projectid, {status:0}, { new: true, upsert: true }, function (err, project) {
63
+ if (err) {
64
+ winston.error('Error deleting project ', err);
65
+ return res.status(500).send({ success: false, msg: 'Error deleting object.' });
66
+ }
67
+ projectEvent.emit('project.delete', project );
68
+ res.json(project);
69
+ });
70
+ });
71
+
20
72
  router.put('/:projectid', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRole('admin')], function (req, res) {
21
73
  winston.debug('UPDATE PROJECT REQ BODY ', req.body);
22
74
 
package/routes/request.js CHANGED
@@ -840,7 +840,7 @@ router.get('/', function (req, res, next) {
840
840
  var projection = undefined;
841
841
 
842
842
  if (req.query.full_text) {
843
- winston.info('fulltext projection');
843
+ winston.debug('fulltext projection');
844
844
 
845
845
  projection = {score: { $meta: "textScore" } };
846
846
  }
@@ -873,7 +873,7 @@ router.get('/', function (req, res, next) {
873
873
  // }
874
874
 
875
875
  if (req.query.full_text) {
876
- winston.info('fulltext sort');
876
+ winston.debug('fulltext sort');
877
877
  q1.sort( { score: { $meta: "textScore" } } ) //https://docs.mongodb.com/manual/reference/operator/query/text/#sort-by-text-search-score
878
878
  } else {
879
879
  q1.sort(sortQuery);
@@ -1026,6 +1026,7 @@ router.get('/csv', function (req, res, next) {
1026
1026
 
1027
1027
 
1028
1028
 
1029
+
1029
1030
  winston.debug('REQUEST ROUTE - REQUEST FIND ', query)
1030
1031
  return Request.find(query, '-transcript -status -__v').
1031
1032
  skip(skip).limit(limit).
@@ -0,0 +1,140 @@
1
+ var express = require('express');
2
+ var router = express.Router();
3
+ var Subscription = require("../models/subscription");
4
+ var SubscriptionLog = require("../models/subscriptionLog");
5
+ var subscriptionEvent = require("../event/subscriptionEvent");
6
+ var winston = require('../config/winston');
7
+
8
+ //space
9
+
10
+ router.post('/', function (req, res) {
11
+
12
+ winston.debug(req.body);
13
+ winston.debug("req.user", req.user);
14
+
15
+ var subscription = new Subscription({
16
+ target: req.body.target,
17
+ event: req.body.event,
18
+ id_project: req.projectid,
19
+ createdBy: req.user.id
20
+ });
21
+
22
+ subscription.save(function (err, subscriptionSaved) {
23
+ if (err) {
24
+ if (err.code === 11000) { //error for dupes
25
+ return Subscription.findOne({id_project:req.projectid, event: req.body.event}).select("+secret")
26
+ .exec(function (err, subscriptionSaved) {
27
+ res.setHeader('x-hook-secret', subscriptionSaved.secret);
28
+ res.json(subscriptionSaved);
29
+ });
30
+ }
31
+ winston.error('--- > ERROR ', err)
32
+ return res.status(500).send({ success: false, msg: 'Error saving object.' });
33
+ }
34
+ // http://resthooks.org/docs/security/
35
+
36
+ res.setHeader('x-hook-secret', subscriptionSaved.secret);
37
+
38
+ subscriptionEvent.emit('subscription.create', subscriptionSaved );
39
+ res.json(subscriptionSaved);
40
+ });
41
+ });
42
+
43
+
44
+ router.post('/test', function (req, res) {
45
+
46
+ winston.debug("test subscription body", req.body);
47
+
48
+ res.json(req);
49
+ });
50
+
51
+ router.put('/:subscriptionid', function (req, res) {
52
+
53
+ winston.debug(req.body);
54
+
55
+ Subscription.findByIdAndUpdate(req.params.subscriptionid, req.body, { new: true, upsert: true }, function (err, subscriptionUpd) {
56
+ if (err) {
57
+ return res.status(500).send({ success: false, msg: 'Error updating object.' });
58
+ }
59
+ subscriptionEvent.emit('subscription.update', subscriptionUpd );
60
+ res.json(subscriptionUpd);
61
+ });
62
+ });
63
+
64
+
65
+ router.delete('/:subscriptionid', function (req, res) {
66
+
67
+ winston.debug(req.body);
68
+
69
+ Subscription.remove({ _id: req.params.subscriptionid }, function (err, subscriptionUpd) {
70
+ if (err) {
71
+ return res.status(500).send({ success: false, msg: 'Error deleting object.' });
72
+ }
73
+ subscriptionEvent.emit('subscription.delete', subscriptionUpd );
74
+ res.json(subscriptionUpd);
75
+ });
76
+ });
77
+
78
+
79
+
80
+
81
+ router.get('/', function (req, res) {
82
+
83
+ return Subscription.find({ "id_project": req.projectid }).
84
+ exec(function (err, subscriptions, next) {
85
+ if (err) {
86
+ winston.error('Subscription ROUTE - REQUEST FIND ERR ', err)
87
+ return next(err);
88
+ }
89
+
90
+ return res.json(subscriptions);
91
+ });
92
+
93
+ });
94
+
95
+ router.get('/history', function (req, res) {
96
+
97
+ var limit = 40; // Number of leads per page
98
+ var page = 0;
99
+
100
+ if (req.query.page) {
101
+ page = req.query.page;
102
+ }
103
+
104
+ var skip = page * limit;
105
+ winston.debug('Subscription ROUTE - SKIP PAGE ', skip);
106
+
107
+
108
+ return SubscriptionLog.find({ "id_project": req.projectid }).
109
+ skip(skip).limit(limit)
110
+ .sort({createdAt: 'desc'}).
111
+ exec(function (err, subscriptions, next) {
112
+ if (err) {
113
+ winston.error('Subscription ROUTE - REQUEST FIND ERR ', err)
114
+ return next(err);
115
+ }
116
+
117
+ return res.json(subscriptions);
118
+ });
119
+
120
+ });
121
+
122
+
123
+ router.get('/:subscriptionid', function (req, res) {
124
+
125
+ winston.debug(req.body);
126
+
127
+ Subscription.findById(req.params.subscriptionid, function (err, subscriptionUpd) {
128
+ if (err) {
129
+ return res.status(500).send({ success: false, msg: 'Error getting object.' });
130
+ }
131
+ if (!subscriptionUpd) {
132
+ return res.status(404).send({ success: false, msg: 'Object not found.' });
133
+ }
134
+ res.json(subscriptionUpd);
135
+ });
136
+ });
137
+
138
+
139
+
140
+ module.exports = router;