-
-
Notifications
You must be signed in to change notification settings - Fork 431
/
groups.js
107 lines (84 loc) · 3.76 KB
/
groups.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
/*
* . .o8 oooo
* .o8 "888 `888
* .o888oo oooo d8b oooo oooo .oooo888 .ooooo. .oooo.o 888 oooo
* 888 `888""8P `888 `888 d88' `888 d88' `88b d88( "8 888 .8P'
* 888 888 888 888 888 888 888ooo888 `"Y88b. 888888.
* 888 . 888 888 888 888 888 888 .o o. )88b 888 `88b.
* "888" d888b `V88V"V8P' `Y8bod88P" `Y8bod8P' 8""888P' o888o o888o
* ========================================================================
* Author: Chris Brame
* Updated: 4/8/19 1:00 AM
* Copyright (c) 2014-2019. All rights reserved.
*/
var apiUtils = require('../apiUtils')
var Ticket = require('../../../models/ticket')
var Group = require('../../../models/group')
var Department = require('../../../models/department')
var apiGroups = {}
apiGroups.create = function (req, res) {
var postGroup = req.body
if (!postGroup) return apiUtils.sendApiError_InvalidPostData(res)
Group.create(postGroup, function (err, group) {
if (err) return apiUtils.sendApiError(res, 500, err.message)
group.populate('members', function (err, group) {
if (err) return apiUtils.sendApiError(res, 500, err.message)
return apiUtils.sendApiSuccess(res, { group: group })
})
})
}
apiGroups.get = function (req, res) {
var limit = Number(req.query.limit) || 10
var page = Number(req.query.page) || 0
var type = req.query.type || 'user'
if (type === 'all') {
Group.getWithObject({ limit: limit, page: page }, function (err, groups) {
if (err) return apiUtils.sendApiError(res, 500, err.message)
return apiUtils.sendApiSuccess(res, { groups: groups, count: groups.length })
})
} else {
if (req.user.role.isAdmin || req.user.role.isAgent) {
Department.getDepartmentGroupsOfUser(req.user._id, function (err, groups) {
if (err) return apiUtils.sendApiError(res, 500, err.message)
return apiUtils.sendApiSuccess(res, { groups: groups, count: groups.length })
})
} else {
Group.getAllGroupsOfUser(req.user._id, function (err, groups) {
if (err) return apiUtils.sendApiError(res, 500, err.message)
return apiUtils.sendApiSuccess(res, { groups: groups, count: groups.length })
})
}
}
}
apiGroups.update = function (req, res) {
var id = req.params.id
if (!id) return apiUtils.sendApiError(res, 400, 'Invalid Group Id')
var putData = req.body
if (!putData) return apiUtils.sendApiError_InvalidPostData(res)
Group.findOne({ _id: id }, function (err, group) {
if (err || !group) return apiUtils.sendApiError(res, 400, 'Invalid Group')
if (putData.name) group.name = putData.name
if (putData.members) group.members = putData.members
group.save(function (err, group) {
if (err) return apiUtils.sendApiError(res, 500, err.message)
group.populate('members', function (err, group) {
if (err) return apiUtils.sendApiError(res, 500, err.message)
return apiUtils.sendApiSuccess(res, { group: group })
})
})
})
}
apiGroups.delete = function (req, res) {
var id = req.params.id
if (!id) return apiUtils.sendApiError_InvalidPostData(res)
Ticket.countDocuments({ group: { $in: [id] } }, function (err, tickets) {
if (err) return apiUtils.sendApiError(res, 500, err.message)
if (tickets > 0) return apiUtils.sendApiError(res, 400, 'Unable to delete group with tickets.')
Group.deleteOne({ _id: id }, function (err, success) {
if (err) return apiUtils.sendApiError(res, 500, err.message)
if (!success) return apiUtils.sendApiError(res, 500, 'Unable to delete group. Contact your administrator.')
return apiUtils.sendApiSuccess(res, { _id: id })
})
})
}
module.exports = apiGroups