@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.
- package/CHANGELOG.md +8 -1
- package/LICENSE +14 -657
- package/README.md +21 -18
- package/app.js +27 -3
- package/config/labels/widget.json +320 -0
- package/event/subscriptionEvent.js +11 -0
- package/models/subscriptionEvent.js +11 -0
- package/models/subscriptionLog.js +34 -0
- package/models/tagLibrary.js +42 -0
- package/package.json +5 -11
- package/pubmodules/activities/activityArchiver.js +295 -0
- package/pubmodules/activities/index.js +3 -0
- package/pubmodules/activities/models/activity.js +88 -0
- package/pubmodules/activities/routes/activity.js +710 -0
- package/pubmodules/activities/test/activityRoute.js +85 -0
- package/pubmodules/analytics/analytics.js +1719 -0
- package/pubmodules/analytics/index.js +3 -0
- package/pubmodules/canned/cannedResponse.js +51 -0
- package/pubmodules/canned/cannedResponseRoute.js +157 -0
- package/pubmodules/canned/index.js +3 -0
- package/pubmodules/pubModulesManager.js +115 -7
- package/pubmodules/rasa/index.js +8 -1
- package/pubmodules/rasa/listener.js +28 -7
- package/pubmodules/scheduler/tasks/closeBotUnresponsiveRequestTask.js +2 -2
- package/pubmodules/trigger/default.js +271 -0
- package/pubmodules/trigger/event/actionEventEmitter.js +10 -0
- package/pubmodules/trigger/event/flowEventEmitter.js +10 -0
- package/pubmodules/trigger/event/triggerEventEmitter.js +10 -0
- package/pubmodules/trigger/index.js +3 -0
- package/pubmodules/trigger/models/trigger.js +149 -0
- package/pubmodules/trigger/rulesTrigger.js +1180 -0
- package/pubmodules/trigger/start.js +114 -0
- package/pubmodules/trigger/triggerRoute.js +150 -0
- package/routes/department.js +51 -0
- package/routes/group.js +140 -0
- package/routes/project.js +52 -0
- package/routes/request.js +3 -2
- package/routes/subscription.js +140 -0
- package/routes/tag.js +138 -0
- package/services/faqBotHandler.js +2 -2
- package/services/faqBotSupport.js +0 -1
- package/services/faqService.js +1 -1
- package/services/modulesManager.js +16 -182
- package/services/subscriptionNotifier.js +485 -0
- package/template/email/assignedEmailMessage.html +1 -1
- package/template/email/assignedRequest.html +1 -1
- package/template/email/newMessage.html +1 -1
- package/template/email/passwordChanged.html +1 -1
- package/template/email/pooledEmailMessage.html +1 -1
- package/template/email/pooledRequest.html +1 -1
- package/template/email/resetPassword.html +2 -2
- package/template/email/ticket.html +1 -1
- 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;
|
package/routes/department.js
CHANGED
@@ -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;
|
package/routes/group.js
ADDED
@@ -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.
|
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.
|
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;
|