shuttlepro-shared 1.3.13 → 1.3.14
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/constants/index.js +0 -15
- package/index.js +0 -8
- package/models/UserRole.js +119 -1
- package/models/Website.js +1 -0
- package/models.js +1 -62
- package/package.json +2 -13
- package/common/repositories/chatMember.repository.js +0 -9
- package/common/repositories/customerProfile.repository.js +0 -147
- package/common/repositories/descriptionTemplates.repository.js +0 -229
- package/common/repositories/index.js +0 -32
- package/common/repositories/integration.repository.js +0 -210
- package/common/repositories/label.repository.js +0 -95
- package/common/repositories/notificationSettings.repository.js +0 -95
- package/common/repositories/role.repository.js +0 -333
- package/common/repositories/settings.repository.js +0 -32
- package/common/repositories/shipper.repository.js +0 -77
- package/common/repositories/socialMediaSetting.repository.js +0 -33
- package/common/repositories/user.repository.js +0 -150
- package/common/repositories/userPermission.repository.js +0 -228
- package/common/repositories/userRepository.js +0 -31
- package/common/repositories/userRole.repository.js +0 -235
- package/common/repositories/userRolePermission.repository.js +0 -59
- package/common/repositories/workspace.repository.js +0 -147
- package/config/bull.js +0 -78
- package/config/config.js +0 -14
- package/config/database.js +0 -4
- package/config/index.js +0 -13
- package/config/redis.js +0 -196
- package/config/socket.js +0 -172
- package/models/AgentActivity.js +0 -192
- package/models/Assignment.js +0 -23
- package/models/BusinessDistribution.js +0 -23
- package/models/Card.js +0 -144
- package/models/CardComments.js +0 -33
- package/models/ChatMember.js +0 -17
- package/models/Chatbot.js +0 -20
- package/models/Checkpoint.js +0 -50
- package/models/City.js +0 -17
- package/models/Column.js +0 -28
- package/models/Conversation.js +0 -87
- package/models/Customer.js +0 -36
- package/models/CustomerProfile.js +0 -27
- package/models/DefaultRolePermission.js +0 -34
- package/models/DescriptionTemplate.js +0 -22
- package/models/Integration.js +0 -51
- package/models/Label.js +0 -42
- package/models/Message.js +0 -47
- package/models/NewProduct.js +0 -71
- package/models/NotificationSettings.js +0 -130
- package/models/Order.js +0 -236
- package/models/OrderProduct.js +0 -37
- package/models/Profile.js +0 -127
- package/models/Report.js +0 -27
- package/models/Setting.js +0 -18
- package/models/Shipper.js +0 -62
- package/models/SocialMediaSetting.js +0 -28
- package/models/Status.js +0 -58
- package/models/StatusType.js +0 -10
- package/models/Step.js +0 -50
- package/models/Type.js +0 -25
- package/models/UserWorkflow.js +0 -46
- package/models/Workspace.js +0 -308
- package/utils/decorator-factory.js +0 -264
- package/utils/logger.js +0 -41
|
@@ -1,228 +0,0 @@
|
|
|
1
|
-
const { getRedisData, setRedisData } = require("../../config/redis");
|
|
2
|
-
const UserPermission = require("../../models/UserPermission");
|
|
3
|
-
|
|
4
|
-
const CACHE_KEY_ALL = "user_permissions_all";
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Get cached user permissions for all users.
|
|
8
|
-
*/
|
|
9
|
-
const getCachedAllUserPermissions = async () => {
|
|
10
|
-
let permissions = await getRedisData(CACHE_KEY_ALL);
|
|
11
|
-
if (!permissions) {
|
|
12
|
-
permissions = await UserPermission.find({}).lean().exec();
|
|
13
|
-
await setRedisData(CACHE_KEY_ALL, permissions);
|
|
14
|
-
}
|
|
15
|
-
return permissions;
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Update cached user permissions for all users.
|
|
20
|
-
*/
|
|
21
|
-
const updateCachedAllUserPermissions = async () => {
|
|
22
|
-
const permissions = await UserPermission.find({}).lean().exec();
|
|
23
|
-
await setRedisData(CACHE_KEY_ALL, permissions);
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* Get cached user permissions for a specific user.
|
|
28
|
-
* Uses the all permissions cache and filters by userId.
|
|
29
|
-
*/
|
|
30
|
-
const getCachedUserPermissions = async (userId) => {
|
|
31
|
-
const allPermissions = await getCachedAllUserPermissions();
|
|
32
|
-
return allPermissions.filter((perm) => perm.userId === userId);
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* Create a new user permission and update cache.
|
|
37
|
-
*/
|
|
38
|
-
const createUserPermission = async (data) => {
|
|
39
|
-
const newPermission = new UserPermission(data);
|
|
40
|
-
const savedPermission = await newPermission.save();
|
|
41
|
-
|
|
42
|
-
// Update the main cache
|
|
43
|
-
await updateCachedAllUserPermissions();
|
|
44
|
-
|
|
45
|
-
return savedPermission;
|
|
46
|
-
};
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* Find user permissions by user ID.
|
|
50
|
-
*/
|
|
51
|
-
const findUserPermissionsByUserId = async (userId) => {
|
|
52
|
-
return await getCachedUserPermissions(userId);
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* Find user permissions by user ID and workspace ID.
|
|
57
|
-
*/
|
|
58
|
-
const fetchUserPermissionsByWorkspaceId = async (userId, workspaceId) => {
|
|
59
|
-
const allPermissions = await getCachedAllUserPermissions();
|
|
60
|
-
return allPermissions.filter(
|
|
61
|
-
(perm) => perm.userId === userId && perm.workspaceId === workspaceId
|
|
62
|
-
);
|
|
63
|
-
};
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Find a single user permission by filter.
|
|
67
|
-
*/
|
|
68
|
-
const findUserPermission = async (filter, workspaceId = null) => {
|
|
69
|
-
const allPermissions = await getCachedAllUserPermissions();
|
|
70
|
-
|
|
71
|
-
let filteredPermissions = allPermissions;
|
|
72
|
-
if (workspaceId) {
|
|
73
|
-
filteredPermissions = allPermissions.filter(
|
|
74
|
-
(perm) => perm.workspaceId === workspaceId
|
|
75
|
-
);
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
return (
|
|
79
|
-
filteredPermissions.find((perm) =>
|
|
80
|
-
Object.entries(filter).every(([key, value]) => perm[key] === value)
|
|
81
|
-
) || null
|
|
82
|
-
);
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
/**
|
|
86
|
-
* Find all user permissions that match a filter.
|
|
87
|
-
*/
|
|
88
|
-
const findAllUserPermissionsByFilter = async (
|
|
89
|
-
filter = {},
|
|
90
|
-
workspaceId = null
|
|
91
|
-
) => {
|
|
92
|
-
const allPermissions = await getCachedAllUserPermissions();
|
|
93
|
-
|
|
94
|
-
let filteredPermissions = allPermissions;
|
|
95
|
-
if (workspaceId) {
|
|
96
|
-
filteredPermissions = allPermissions.filter(
|
|
97
|
-
(perm) => perm.workspaceId === workspaceId
|
|
98
|
-
);
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
return (
|
|
102
|
-
filteredPermissions.filter((perm) =>
|
|
103
|
-
Object.entries(filter).every(([key, value]) => perm[key] === value)
|
|
104
|
-
) || []
|
|
105
|
-
);
|
|
106
|
-
};
|
|
107
|
-
|
|
108
|
-
/**
|
|
109
|
-
* Find all user permissions (without filtering).
|
|
110
|
-
*/
|
|
111
|
-
const findAllUserPermissions = async () => {
|
|
112
|
-
return await getCachedAllUserPermissions();
|
|
113
|
-
};
|
|
114
|
-
|
|
115
|
-
/**
|
|
116
|
-
* Update a user permission by ID.
|
|
117
|
-
*/
|
|
118
|
-
const updateUserPermission = async (id, data) => {
|
|
119
|
-
const updatedPermission = await UserPermission.findByIdAndUpdate(id, data, {
|
|
120
|
-
new: true,
|
|
121
|
-
}).exec();
|
|
122
|
-
|
|
123
|
-
if (updatedPermission) {
|
|
124
|
-
// Update the main cache
|
|
125
|
-
await updateCachedAllUserPermissions();
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
return updatedPermission;
|
|
129
|
-
};
|
|
130
|
-
|
|
131
|
-
/**
|
|
132
|
-
* Update a user permission by filter.
|
|
133
|
-
*/
|
|
134
|
-
const updateUserPermissionByFilter = async (
|
|
135
|
-
filter,
|
|
136
|
-
data,
|
|
137
|
-
workspaceId = null
|
|
138
|
-
) => {
|
|
139
|
-
// Add workspace filter if provided
|
|
140
|
-
const queryFilter = workspaceId ? { ...filter, workspaceId } : filter;
|
|
141
|
-
|
|
142
|
-
const updatedPermission = await UserPermission.findOneAndUpdate(
|
|
143
|
-
queryFilter,
|
|
144
|
-
data,
|
|
145
|
-
{
|
|
146
|
-
new: true,
|
|
147
|
-
}
|
|
148
|
-
).exec();
|
|
149
|
-
|
|
150
|
-
if (updatedPermission) {
|
|
151
|
-
// Update the main cache
|
|
152
|
-
await updateCachedAllUserPermissions();
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
return updatedPermission;
|
|
156
|
-
};
|
|
157
|
-
|
|
158
|
-
/**
|
|
159
|
-
* Delete a user permission by ID.
|
|
160
|
-
*/
|
|
161
|
-
const deleteUserPermission = async (id) => {
|
|
162
|
-
const deletedPermission = await UserPermission.findByIdAndDelete(id).exec();
|
|
163
|
-
|
|
164
|
-
if (deletedPermission) {
|
|
165
|
-
// Update the main cache
|
|
166
|
-
await updateCachedAllUserPermissions();
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
return deletedPermission;
|
|
170
|
-
};
|
|
171
|
-
|
|
172
|
-
/**
|
|
173
|
-
* Delete user permissions by filter.
|
|
174
|
-
*/
|
|
175
|
-
const deleteUserPermissionsByFilter = async (filter) => {
|
|
176
|
-
const result = await UserPermission.deleteMany(filter).exec();
|
|
177
|
-
|
|
178
|
-
if (result.deletedCount > 0) {
|
|
179
|
-
// Update the main cache
|
|
180
|
-
await updateCachedAllUserPermissions();
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
return result;
|
|
184
|
-
};
|
|
185
|
-
|
|
186
|
-
/**
|
|
187
|
-
* Delete all user permissions for a specific workspace.
|
|
188
|
-
*/
|
|
189
|
-
const deleteAllUserPermissionsByWorkspace = async (workspaceId) => {
|
|
190
|
-
await UserPermission.deleteMany({ workspaceId }).exec();
|
|
191
|
-
|
|
192
|
-
// Update the main cache
|
|
193
|
-
await updateCachedAllUserPermissions();
|
|
194
|
-
};
|
|
195
|
-
|
|
196
|
-
/**
|
|
197
|
-
* Bulk create or update user permissions.
|
|
198
|
-
*/
|
|
199
|
-
const bulkCreateAndUpdateUserPermissions = async (operations) => {
|
|
200
|
-
await UserPermission.bulkWrite(operations);
|
|
201
|
-
await updateCachedAllUserPermissions();
|
|
202
|
-
return operations;
|
|
203
|
-
};
|
|
204
|
-
|
|
205
|
-
/**
|
|
206
|
-
* Insert multiple user permissions and update cache.
|
|
207
|
-
*/
|
|
208
|
-
const insertManyUserPermissions = async (permissionsArray) => {
|
|
209
|
-
const inserted = await UserPermission.insertMany(permissionsArray);
|
|
210
|
-
await updateCachedAllUserPermissions();
|
|
211
|
-
return inserted;
|
|
212
|
-
};
|
|
213
|
-
|
|
214
|
-
module.exports = {
|
|
215
|
-
createUserPermission,
|
|
216
|
-
findUserPermission,
|
|
217
|
-
findUserPermissionsByUserId,
|
|
218
|
-
fetchUserPermissionsByWorkspaceId,
|
|
219
|
-
findAllUserPermissionsByFilter,
|
|
220
|
-
findAllUserPermissions,
|
|
221
|
-
updateUserPermission,
|
|
222
|
-
updateUserPermissionByFilter,
|
|
223
|
-
deleteUserPermission,
|
|
224
|
-
deleteUserPermissionsByFilter,
|
|
225
|
-
deleteAllUserPermissionsByWorkspace,
|
|
226
|
-
bulkCreateAndUpdateUserPermissions,
|
|
227
|
-
insertManyUserPermissions,
|
|
228
|
-
};
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
const User = require("../../models/User");
|
|
2
|
-
|
|
3
|
-
const createUser = async (data) => {
|
|
4
|
-
const newUser = new User(data);
|
|
5
|
-
const savedUser = await newUser.save();
|
|
6
|
-
return savedUser;
|
|
7
|
-
};
|
|
8
|
-
|
|
9
|
-
const findUser = async (filter) => {
|
|
10
|
-
return await User.findOne(filter).exec();
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
const updateUser = async (id, data) => {
|
|
14
|
-
const updatedUser = await User.findByIdAndUpdate(id, data, {
|
|
15
|
-
new: true,
|
|
16
|
-
}).exec();
|
|
17
|
-
|
|
18
|
-
return updatedUser;
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
const deleteUser = async (id) => {
|
|
22
|
-
const deletedUser = await User.findByIdAndDelete(id).exec();
|
|
23
|
-
return deletedUser;
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
module.exports = {
|
|
27
|
-
createUser,
|
|
28
|
-
findUser,
|
|
29
|
-
updateUser,
|
|
30
|
-
deleteUser,
|
|
31
|
-
};
|
|
@@ -1,235 +0,0 @@
|
|
|
1
|
-
const { UserRole } = require("../../models/UserRole");
|
|
2
|
-
const { getRedisData, setRedisData } = require("../../config/redis");
|
|
3
|
-
|
|
4
|
-
const defaultSelect =
|
|
5
|
-
"iconUrl thumbUrl name productsCount ordersCount contact email address websiteUrl facebookUrl twitterUrl instagramUrl members defaultModule";
|
|
6
|
-
|
|
7
|
-
// Cache keys
|
|
8
|
-
const MEMBERS = "members";
|
|
9
|
-
|
|
10
|
-
// Update the cache for all members
|
|
11
|
-
const updateCachedMembers = async (workspaceId) => {
|
|
12
|
-
try {
|
|
13
|
-
const members = await UserRole.find({ workspaceId })
|
|
14
|
-
.select("userId role userShift roleId isOwner workspaceId")
|
|
15
|
-
.populate({
|
|
16
|
-
path: "roleId",
|
|
17
|
-
select:
|
|
18
|
-
"id name userId userShift permissionId modulePermissions workspaceId",
|
|
19
|
-
populate: [{ path: "permissionId", select: "id name" }],
|
|
20
|
-
})
|
|
21
|
-
.populate({
|
|
22
|
-
path: "userId",
|
|
23
|
-
match: { isDeleted: false, suspended: false },
|
|
24
|
-
select: "firstName lastName role email picture userShift",
|
|
25
|
-
})
|
|
26
|
-
.lean()
|
|
27
|
-
.exec();
|
|
28
|
-
await setRedisData(workspaceId, members, MEMBERS, 3600);
|
|
29
|
-
return members;
|
|
30
|
-
} catch (error) {
|
|
31
|
-
console.error("Error updating cached members:", error);
|
|
32
|
-
return [];
|
|
33
|
-
}
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
const getMembers = async (workspaceId) => {
|
|
37
|
-
let members = await getRedisData(workspaceId, MEMBERS);
|
|
38
|
-
if (!members || members?.length === 0) {
|
|
39
|
-
members = await UserRole.find({ workspaceId })
|
|
40
|
-
.select("userId role userShift roleId isOwner workspaceId")
|
|
41
|
-
.populate({
|
|
42
|
-
path: "roleId",
|
|
43
|
-
select:
|
|
44
|
-
"id name userId userShift permissionId modulePermissions workspaceId",
|
|
45
|
-
populate: [{ path: "permissionId", select: "id name" }],
|
|
46
|
-
})
|
|
47
|
-
.populate({
|
|
48
|
-
path: "userId",
|
|
49
|
-
match: { isDeleted: false, suspended: false },
|
|
50
|
-
select: "firstName lastName role email picture userShift",
|
|
51
|
-
})
|
|
52
|
-
.lean()
|
|
53
|
-
.exec();
|
|
54
|
-
await setRedisData(workspaceId, members, MEMBERS, 3600);
|
|
55
|
-
}
|
|
56
|
-
return members;
|
|
57
|
-
};
|
|
58
|
-
|
|
59
|
-
const getMemberByWorkspaceIdAndUserId = async (workspaceId, userId) => {
|
|
60
|
-
const members = await getMembers(workspaceId);
|
|
61
|
-
return (
|
|
62
|
-
members?.find(
|
|
63
|
-
(member) =>
|
|
64
|
-
member?.workspaceId === workspaceId && member?.userId?._id === userId
|
|
65
|
-
) || null
|
|
66
|
-
);
|
|
67
|
-
};
|
|
68
|
-
|
|
69
|
-
// Find single user role by filter
|
|
70
|
-
const findSingleUserRoleByFilter = async ({ workspaceId, userId }) => {
|
|
71
|
-
return await getMemberByWorkspaceIdAndUserId(workspaceId, userId);
|
|
72
|
-
};
|
|
73
|
-
|
|
74
|
-
const findAllUserRoles = async (workspaceId) => {
|
|
75
|
-
return await getMembers(workspaceId);
|
|
76
|
-
};
|
|
77
|
-
|
|
78
|
-
const createUserRole = async (data) => {
|
|
79
|
-
const savedRole = await UserRole.create(data);
|
|
80
|
-
return await updateCachedMembers(savedRole?.workspaceId?.toString());
|
|
81
|
-
};
|
|
82
|
-
|
|
83
|
-
const findOneAndUpdateUserRole = async (filter, payload) => {
|
|
84
|
-
await UserRole.findOneAndUpdate(
|
|
85
|
-
filter,
|
|
86
|
-
{ $set: payload },
|
|
87
|
-
{ new: true, upsert: false }
|
|
88
|
-
)
|
|
89
|
-
.lean()
|
|
90
|
-
.exec();
|
|
91
|
-
return await updateCachedMembers(filter.workspaceId);
|
|
92
|
-
};
|
|
93
|
-
|
|
94
|
-
const updateUserRole = async (filter, payload) => {
|
|
95
|
-
await UserRole.updateOne(filter, payload).exec();
|
|
96
|
-
return await updateCachedMembers(filter.workspaceId);
|
|
97
|
-
};
|
|
98
|
-
|
|
99
|
-
// Update multiple user roles based on filter
|
|
100
|
-
const updateManyUserRoles = async (filter, payload) => {
|
|
101
|
-
await UserRole.updateMany(filter, { $set: payload }).exec();
|
|
102
|
-
return await updateCachedMembers(filter.workspaceId);
|
|
103
|
-
};
|
|
104
|
-
|
|
105
|
-
const deleteUserRoleByFilter = async (filter) => {
|
|
106
|
-
await UserRole.deleteOne(filter).exec();
|
|
107
|
-
return await updateCachedMembers(filter.workspaceId);
|
|
108
|
-
};
|
|
109
|
-
|
|
110
|
-
const convertPermissionsArrayToObject = (originalArray) => {
|
|
111
|
-
return originalArray?.reduce((acc, item) => {
|
|
112
|
-
const { id, actions, integrationPermissions, ...extras } = item;
|
|
113
|
-
const formattedExtras = {};
|
|
114
|
-
if (extras.deletable !== undefined) {
|
|
115
|
-
formattedExtras.deletable = extras.deletable;
|
|
116
|
-
}
|
|
117
|
-
if (extras.createUpdateable !== undefined) {
|
|
118
|
-
formattedExtras.createUpdateable = extras.createUpdateable;
|
|
119
|
-
}
|
|
120
|
-
acc[id] = {
|
|
121
|
-
actions: Object.keys(actions).filter((action) => actions[action]),
|
|
122
|
-
...formattedExtras,
|
|
123
|
-
...(integrationPermissions && {
|
|
124
|
-
integrationPermissions: Object.entries(integrationPermissions)
|
|
125
|
-
.filter(([_, allowed]) => allowed)
|
|
126
|
-
.map(([key]) => key),
|
|
127
|
-
}),
|
|
128
|
-
};
|
|
129
|
-
return acc;
|
|
130
|
-
}, {});
|
|
131
|
-
};
|
|
132
|
-
|
|
133
|
-
const getUserPermissions = async (workspaceId, userId) => {
|
|
134
|
-
try {
|
|
135
|
-
let data = await getMemberByWorkspaceIdAndUserId(workspaceId, userId);
|
|
136
|
-
if (data) {
|
|
137
|
-
return (
|
|
138
|
-
convertPermissionsArrayToObject(
|
|
139
|
-
data?.roleId?.modulePermissions?.modules
|
|
140
|
-
) || null
|
|
141
|
-
);
|
|
142
|
-
}
|
|
143
|
-
return null;
|
|
144
|
-
} catch (err) {
|
|
145
|
-
console.error("Error in getUserPermissions:", err);
|
|
146
|
-
return null;
|
|
147
|
-
}
|
|
148
|
-
};
|
|
149
|
-
|
|
150
|
-
const getUserRoleWithPermissions = async (workspaceId, userId) => {
|
|
151
|
-
try {
|
|
152
|
-
let data = await getMemberByWorkspaceIdAndUserId(workspaceId, userId);
|
|
153
|
-
if (data) {
|
|
154
|
-
const roleWithPermissions = {
|
|
155
|
-
...data,
|
|
156
|
-
roleId: data?.roleId?._id?.toString() || "",
|
|
157
|
-
role: data?.roleId?.name || "",
|
|
158
|
-
permissions:
|
|
159
|
-
convertPermissionsArrayToObject(
|
|
160
|
-
data?.roleId?.modulePermissions?.modules
|
|
161
|
-
) || [],
|
|
162
|
-
parentRole: data?.roleId?.permissionId?.name || "",
|
|
163
|
-
parentRoleId: data?.roleId?.permissionId?._id?.toString() || "",
|
|
164
|
-
defaultModule: data?.roleId?.defaultModule || "",
|
|
165
|
-
};
|
|
166
|
-
return roleWithPermissions || null;
|
|
167
|
-
}
|
|
168
|
-
return null;
|
|
169
|
-
} catch (err) {
|
|
170
|
-
console.error("Error in getUserRoleWithPermissions:", err);
|
|
171
|
-
return null;
|
|
172
|
-
}
|
|
173
|
-
};
|
|
174
|
-
|
|
175
|
-
const getChannelsPermissions = async (workspaceId, userId) => {
|
|
176
|
-
try {
|
|
177
|
-
let data = await getMemberByWorkspaceIdAndUserId(workspaceId, userId);
|
|
178
|
-
if (data) {
|
|
179
|
-
return (
|
|
180
|
-
convertPermissionsArrayToObject(
|
|
181
|
-
data?.roleId?.modulePermissions?.modules
|
|
182
|
-
)?.["conversations"]?.["integrationPermissions"] || []
|
|
183
|
-
);
|
|
184
|
-
}
|
|
185
|
-
return [];
|
|
186
|
-
} catch (err) {
|
|
187
|
-
console.error("Error in getChannelsPermissions:", err);
|
|
188
|
-
return [];
|
|
189
|
-
}
|
|
190
|
-
};
|
|
191
|
-
|
|
192
|
-
const findUserWorkspaces = async (userId) => {
|
|
193
|
-
let userRoleWithWorkspaces = await UserRole.find({ userId: userId })
|
|
194
|
-
.select("userId roleId workspaceId")
|
|
195
|
-
.populate({
|
|
196
|
-
path: "roleId",
|
|
197
|
-
select: "id name userId userShift permissionId modulePermissions",
|
|
198
|
-
populate: [{ path: "permissionId", select: "id name" }],
|
|
199
|
-
})
|
|
200
|
-
.populate({
|
|
201
|
-
path: "workspaceId",
|
|
202
|
-
select: defaultSelect,
|
|
203
|
-
match: { isDeleted: false },
|
|
204
|
-
})
|
|
205
|
-
.lean()
|
|
206
|
-
.exec();
|
|
207
|
-
userRoleWithWorkspaces = userRoleWithWorkspaces
|
|
208
|
-
?.filter((userRole) => userRole?.workspaceId)
|
|
209
|
-
?.filter((userRole) => userRole?.roleId)
|
|
210
|
-
?.map((ur) => {
|
|
211
|
-
return {
|
|
212
|
-
...ur?.workspaceId,
|
|
213
|
-
id: ur?.workspaceId?._id?.toString(),
|
|
214
|
-
_id: ur?.workspaceId?._id?.toString(),
|
|
215
|
-
role: ur?.roleId?.name || "",
|
|
216
|
-
permissions: ur?.roleId?.modulePermissions?.modules || [],
|
|
217
|
-
};
|
|
218
|
-
});
|
|
219
|
-
return userRoleWithWorkspaces || [];
|
|
220
|
-
};
|
|
221
|
-
|
|
222
|
-
module.exports = {
|
|
223
|
-
createUserRole,
|
|
224
|
-
updateUserRole,
|
|
225
|
-
updateManyUserRoles,
|
|
226
|
-
findAllUserRoles,
|
|
227
|
-
deleteUserRoleByFilter,
|
|
228
|
-
findUserWorkspaces,
|
|
229
|
-
getUserRoleWithPermissions,
|
|
230
|
-
getUserPermissions,
|
|
231
|
-
getChannelsPermissions,
|
|
232
|
-
findOneAndUpdateUserRole,
|
|
233
|
-
findSingleUserRoleByFilter,
|
|
234
|
-
updateCachedMembers,
|
|
235
|
-
};
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
const DefaultRolePermission = require("../../models/DefaultRolePermission");
|
|
2
|
-
|
|
3
|
-
const createDefaultRolePermission = async (data) => {
|
|
4
|
-
const newPermission = new DefaultRolePermission(data);
|
|
5
|
-
const savedPermission = await newPermission.save();
|
|
6
|
-
return savedPermission;
|
|
7
|
-
};
|
|
8
|
-
|
|
9
|
-
const findDefaultRolePermission = async (filter) => {
|
|
10
|
-
return await DefaultRolePermission.findOne(filter).exec();
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
const findAllDefaultRolePermissions = async (filter = {}) => {
|
|
14
|
-
return await DefaultRolePermission.find(filter).exec();
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
const updateDefaultRolePermission = async (id, data) => {
|
|
18
|
-
const updatedPermission = await DefaultRolePermission.findByIdAndUpdate(
|
|
19
|
-
id,
|
|
20
|
-
data,
|
|
21
|
-
{
|
|
22
|
-
new: true,
|
|
23
|
-
}
|
|
24
|
-
).exec();
|
|
25
|
-
return updatedPermission;
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
const deleteDefaultRolePermission = async (id) => {
|
|
29
|
-
const deletedPermission = await DefaultRolePermission.findByIdAndDelete(
|
|
30
|
-
id
|
|
31
|
-
).exec();
|
|
32
|
-
return deletedPermission;
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
const deleteDefaultRolePermissionsByFilter = async (filter) => {
|
|
36
|
-
const deleted = await DefaultRolePermission.deleteMany(filter).exec();
|
|
37
|
-
return deleted;
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
const deleteOneDefaultRolePermissionByFilter = async (filter) => {
|
|
41
|
-
const deleted = await DefaultRolePermission.findOneAndDelete(filter).exec();
|
|
42
|
-
return deleted;
|
|
43
|
-
};
|
|
44
|
-
|
|
45
|
-
const insertManyUserPermissions = async (permissionsArray) => {
|
|
46
|
-
const inserted = await UserPermission.insertMany(permissionsArray);
|
|
47
|
-
return inserted;
|
|
48
|
-
};
|
|
49
|
-
|
|
50
|
-
module.exports = {
|
|
51
|
-
createDefaultRolePermission,
|
|
52
|
-
findDefaultRolePermission,
|
|
53
|
-
findAllDefaultRolePermissions,
|
|
54
|
-
updateDefaultRolePermission,
|
|
55
|
-
deleteDefaultRolePermission,
|
|
56
|
-
deleteDefaultRolePermissionsByFilter,
|
|
57
|
-
deleteOneDefaultRolePermissionByFilter,
|
|
58
|
-
insertManyUserPermissions,
|
|
59
|
-
};
|
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
const { getRedisData, setRedisData } = require("../../config/redis");
|
|
2
|
-
const Workspace = require("../../models/Workspace");
|
|
3
|
-
|
|
4
|
-
const CACHE_KEY_ALL = "workspaces_all";
|
|
5
|
-
|
|
6
|
-
const getCachedWorkspaces = async () => {
|
|
7
|
-
let workspaces = await getRedisData(CACHE_KEY_ALL);
|
|
8
|
-
if (!workspaces) {
|
|
9
|
-
workspaces = await Workspace.find().lean().exec();
|
|
10
|
-
await setRedisData(CACHE_KEY_ALL, workspaces);
|
|
11
|
-
} else {
|
|
12
|
-
workspaces = workspaces;
|
|
13
|
-
}
|
|
14
|
-
return workspaces;
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
const updateCachedWorkspaces = async () => {
|
|
18
|
-
const workspaces = await Workspace.find().lean().exec();
|
|
19
|
-
await setRedisData(CACHE_KEY_ALL, workspaces);
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
const createWorkspace = async (data) => {
|
|
23
|
-
const newWorkspace = new Workspace(data);
|
|
24
|
-
const savedWorkspace = await newWorkspace.save();
|
|
25
|
-
await updateCachedWorkspaces();
|
|
26
|
-
return savedWorkspace;
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
const findWorkspaceById = async (id, select = []) => {
|
|
30
|
-
const workspaces = await getCachedWorkspaces();
|
|
31
|
-
const workspace =
|
|
32
|
-
workspaces.find((ws) => ws._id.toString() === id && !ws?.isDeleted) || null;
|
|
33
|
-
if (workspace && select.length > 0) {
|
|
34
|
-
return select.reduce((result, field) => {
|
|
35
|
-
if (workspace[field] !== undefined) {
|
|
36
|
-
result[field] = workspace[field];
|
|
37
|
-
}
|
|
38
|
-
return result;
|
|
39
|
-
}, {});
|
|
40
|
-
}
|
|
41
|
-
return workspace;
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
const findWorkspace = async (filter) => {
|
|
45
|
-
const workspaces = await getCachedWorkspaces();
|
|
46
|
-
return (
|
|
47
|
-
workspaces.find((ws) =>
|
|
48
|
-
Object.entries(filter).every(([key, value]) => ws[key] === value)
|
|
49
|
-
) || null
|
|
50
|
-
);
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
const findSingleWorkspace = async (filter) => {
|
|
54
|
-
const cachedWorkspaces = await getCachedWorkspaces();
|
|
55
|
-
const cachedWorkspace = cachedWorkspaces.find((ws) =>
|
|
56
|
-
Object.entries(filter).every(([key, value]) => ws[key] === value)
|
|
57
|
-
);
|
|
58
|
-
if (cachedWorkspace) return cachedWorkspace;
|
|
59
|
-
const workspace = await Workspace.findOne(filter).lean().exec();
|
|
60
|
-
return workspace;
|
|
61
|
-
};
|
|
62
|
-
|
|
63
|
-
const findWorkspaceByIdAndQueueTracking = async (id) => {
|
|
64
|
-
const workspaces = await getCachedWorkspaces();
|
|
65
|
-
return (
|
|
66
|
-
workspaces.find((ws) => ws._id.toString() === id && ws.queueTracking) ||
|
|
67
|
-
null
|
|
68
|
-
);
|
|
69
|
-
};
|
|
70
|
-
|
|
71
|
-
const findAllWorkspaces = async (filter = {}) => {
|
|
72
|
-
const workspaces = await getCachedWorkspaces();
|
|
73
|
-
return workspaces.filter((ws) =>
|
|
74
|
-
Object.entries(filter).every(([key, value]) => ws[key] === value)
|
|
75
|
-
);
|
|
76
|
-
};
|
|
77
|
-
const updateWorkspaceCache = async (id = "") => {
|
|
78
|
-
const workspace = await Workspace.findById(id).lean().exec();
|
|
79
|
-
await updateCachedWorkspaces();
|
|
80
|
-
return workspace;
|
|
81
|
-
};
|
|
82
|
-
|
|
83
|
-
const updateWorkspace = async (id, data) => {
|
|
84
|
-
const updatedWorkspace = await Workspace.findByIdAndUpdate(id, data, {
|
|
85
|
-
new: true,
|
|
86
|
-
}).exec();
|
|
87
|
-
|
|
88
|
-
if (updatedWorkspace) {
|
|
89
|
-
await updateCachedWorkspaces();
|
|
90
|
-
}
|
|
91
|
-
return updatedWorkspace;
|
|
92
|
-
};
|
|
93
|
-
|
|
94
|
-
const updateOneWorkspace = async (filter, update, options = {}) => {
|
|
95
|
-
const result = await Workspace.updateOne(filter, update, options).exec();
|
|
96
|
-
if (result.matchedCount > 0) {
|
|
97
|
-
await updateCachedWorkspaces();
|
|
98
|
-
}
|
|
99
|
-
return result;
|
|
100
|
-
};
|
|
101
|
-
|
|
102
|
-
const updateManyWorkspaces = async (filter, update, options = {}) => {
|
|
103
|
-
const result = await Workspace.updateMany(filter, update, options).exec();
|
|
104
|
-
if (result.matchedCount > 0) {
|
|
105
|
-
await updateCachedWorkspaces();
|
|
106
|
-
}
|
|
107
|
-
return result;
|
|
108
|
-
};
|
|
109
|
-
|
|
110
|
-
const findOneAndUpdateWorkspace = async (
|
|
111
|
-
filter,
|
|
112
|
-
update,
|
|
113
|
-
options = { new: true }
|
|
114
|
-
) => {
|
|
115
|
-
const updatedWorkspace = await Workspace.findOneAndUpdate(
|
|
116
|
-
filter,
|
|
117
|
-
update,
|
|
118
|
-
options
|
|
119
|
-
).exec();
|
|
120
|
-
if (updatedWorkspace) {
|
|
121
|
-
await updateCachedWorkspaces();
|
|
122
|
-
}
|
|
123
|
-
return updatedWorkspace;
|
|
124
|
-
};
|
|
125
|
-
|
|
126
|
-
const deleteWorkspace = async (id) => {
|
|
127
|
-
const deletedWorkspace = await Workspace.findByIdAndDelete(id).exec();
|
|
128
|
-
if (deletedWorkspace) {
|
|
129
|
-
await updateCachedWorkspaces();
|
|
130
|
-
}
|
|
131
|
-
return deletedWorkspace;
|
|
132
|
-
};
|
|
133
|
-
|
|
134
|
-
module.exports = {
|
|
135
|
-
createWorkspace,
|
|
136
|
-
findWorkspace,
|
|
137
|
-
findSingleWorkspace,
|
|
138
|
-
findWorkspaceById,
|
|
139
|
-
findWorkspaceByIdAndQueueTracking,
|
|
140
|
-
findAllWorkspaces,
|
|
141
|
-
findOneAndUpdateWorkspace,
|
|
142
|
-
updateWorkspace,
|
|
143
|
-
updateOneWorkspace,
|
|
144
|
-
updateManyWorkspaces,
|
|
145
|
-
deleteWorkspace,
|
|
146
|
-
updateWorkspaceCache,
|
|
147
|
-
};
|