shuttlepro-shared 1.2.65 → 1.2.66

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.
@@ -1,409 +1,6 @@
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 CACHE_KEY_ALL_MEMBERS = "userroles_all_members";
9
- // const CACHE_KEY_USER_WORKSPACE_PREFIX = "userrole_workspace_";
10
- // const CACHE_KEY_USER_PERMISSIONS_PREFIX = "user_permissions_";
11
-
12
- // // Comprehensive cache update method
13
- // const updateAllRelatedCaches = async (userId, workspaceId) => {
14
- // try {
15
- // // Update all members cache
16
- // await updateCachedMembers();
17
-
18
- // // Clear user workspace cache
19
- // if (userId) {
20
- // await clearUserWorkspaceCache(userId);
21
- // }
22
-
23
- // // Clear user permissions cache
24
- // if (workspaceId && userId) {
25
- // await clearUserPermissionsCache(workspaceId, userId);
26
- // }
27
- // } catch (error) {
28
- // console.error("Error updating related caches:", error);
29
- // }
30
- // };
31
-
32
- // // Clear user workspace cache
33
- // const clearUserWorkspaceCache = async (userId) => {
34
- // await setRedisData(
35
- // `${CACHE_KEY_USER_WORKSPACE_PREFIX}${userId}`,
36
- // null,
37
- // null,
38
- // 0
39
- // );
40
- // };
41
-
42
- // // Clear user permissions cache
43
- // const clearUserPermissionsCache = async (workspaceId, userId) => {
44
- // const cacheKey = `${CACHE_KEY_USER_PERMISSIONS_PREFIX}${workspaceId}_${userId}`;
45
- // await setRedisData(cacheKey, null, null, 0);
46
- // };
47
-
48
- // // Get cached members
49
- // const getCachedMembers = async (filter = {}) => {
50
- // const cacheKey =
51
- // Object.keys(filter).length > 0
52
- // ? `${CACHE_KEY_ALL_MEMBERS}_${JSON.stringify(filter)}`
53
- // : CACHE_KEY_ALL_MEMBERS;
54
-
55
- // let members = await getRedisData(cacheKey);
56
-
57
- // if (!members) {
58
- // members = await UserRole.find(filter)
59
- // .select("userId role userShift roleId")
60
- // .populate({
61
- // path: "roleId",
62
- // select: "id name userId userShift permissionId modulePermissions",
63
- // populate: [{ path: "permissionId", select: "id name" }],
64
- // })
65
- // .populate({
66
- // path: "userId",
67
- // match: { isDeleted: false, suspended: false },
68
- // select: "firstName lastName role email picture userShift",
69
- // })
70
- // .lean()
71
- // .exec();
72
-
73
- // await setRedisData(
74
- // cacheKey,
75
- // members?.filter((member) => member?.userId && member?.roleId),
76
- // null,
77
- // 0
78
- // );
79
- // }
80
-
81
- // return members;
82
- // };
83
-
84
- // // Update the cache for all members
85
- // const updateCachedMembers = async (filter = {}) => {
86
- // const cacheKey =
87
- // Object.keys(filter).length > 0
88
- // ? `${CACHE_KEY_ALL_MEMBERS}_${JSON.stringify(filter)}`
89
- // : CACHE_KEY_ALL_MEMBERS;
90
-
91
- // const members = await UserRole.find(filter)
92
- // .select("userId role userShift roleId")
93
- // .populate({
94
- // path: "roleId",
95
- // select: "id name userId userShift permissionId modulePermissions",
96
- // populate: [{ path: "permissionId", select: "id name" }],
97
- // })
98
- // .populate({
99
- // path: "userId",
100
- // match: { isDeleted: false, suspended: false },
101
- // select: "firstName lastName role email picture userShift",
102
- // })
103
- // .lean()
104
- // .exec();
105
-
106
- // await setRedisData(
107
- // cacheKey,
108
- // members?.filter((member) => member?.userId && member?.roleId),
109
- // null,
110
- // 0
111
- // );
112
- // return members;
113
- // };
114
-
115
- // const createUserRole = async (data) => {
116
- // const savedRole = await UserRole.create(data);
117
-
118
- // // Update all related caches
119
- // await updateAllRelatedCaches(
120
- // savedRole?.userId?.toString(),
121
- // savedRole?.workspaceId?.toString()
122
- // );
123
-
124
- // return savedRole;
125
- // };
126
-
127
- // const findUserRole = async (filter = {}) => {
128
- // return await getCachedMembers(filter);
129
- // };
130
-
131
- // const updateUserRole = async (id, data) => {
132
- // const updatedRole = await UserRole.findByIdAndUpdate(id, data, {
133
- // new: true,
134
- // }).exec();
135
-
136
- // if (updatedRole) {
137
- // // Update all related caches
138
- // await updateAllRelatedCaches(updatedRole.userId, updatedRole.workspaceId);
139
- // }
140
-
141
- // return updatedRole;
142
- // };
143
-
144
- // const deleteUserRoleByFilter = async (filter) => {
145
- // // Find the role before deleting to get userId and workspaceId
146
- // const roleToDelete = await UserRole.findOne(filter).exec();
147
-
148
- // const deletedRole = await UserRole.findOneAndDelete(filter).exec();
149
-
150
- // if (deletedRole) {
151
- // // Update all related caches
152
- // await updateAllRelatedCaches(
153
- // roleToDelete?.userId,
154
- // roleToDelete?.workspaceId
155
- // );
156
- // }
157
-
158
- // return deletedRole;
159
- // };
160
-
161
- // const deleteUserRole = async (id) => {
162
- // const role = await UserRole.findById(id).exec();
163
- // const userId = role?.userId;
164
- // const workspaceId = role?.workspaceId;
165
-
166
- // const deletedRole = await UserRole.findByIdAndDelete(id).exec();
167
-
168
- // if (deletedRole) {
169
- // // Update all related caches
170
- // await updateAllRelatedCaches(userId, workspaceId);
171
- // }
172
-
173
- // return deletedRole;
174
- // };
175
-
176
- // const findUserWorkspaces = async (userId) => {
177
- // const cacheKey = `${CACHE_KEY_USER_WORKSPACE_PREFIX}${userId}`;
178
- // let userRoleWithWorkspaces = await getRedisData(cacheKey);
179
- // if (!userRoleWithWorkspaces) {
180
- // userRoleWithWorkspaces = await UserRole.find({
181
- // userId: userId,
182
- // })
183
- // .select("userId roleId workspaceId")
184
- // .populate({
185
- // path: "roleId",
186
- // select: "id name userId userShift permissionId modulePermissions",
187
- // populate: [{ path: "permissionId", select: "id name" }],
188
- // })
189
- // .populate({
190
- // path: "workspaceId",
191
- // select: defaultSelect,
192
- // match: { isDeleted: false },
193
- // })
194
- // .lean()
195
- // .exec();
196
- // userRoleWithWorkspaces = userRoleWithWorkspaces
197
- // ?.filter((userRole) => userRole?.workspaceId)
198
- // ?.map((ur) => {
199
- // return {
200
- // ...ur?.workspaceId,
201
- // id: ur?.workspaceId?._id?.toString(),
202
- // _id: ur?.workspaceId?._id?.toString(),
203
- // role: ur?.roleId?.name || "",
204
- // permissions: ur?.roleId?.modulePermissions?.modules || [],
205
- // };
206
- // });
207
- // if (userRoleWithWorkspaces) {
208
- // await setRedisData(cacheKey, userRoleWithWorkspaces, null, 0);
209
- // }
210
- // }
211
- // return userRoleWithWorkspaces;
212
- // };
213
-
214
- // const convertPermissionsArrayToObject = (originalArray) => {
215
- // return originalArray?.reduce((acc, item) => {
216
- // const { id, actions, integrationPermissions, ...extras } = item;
217
- // const formattedExtras = {};
218
- // if (extras.deletable !== undefined) {
219
- // formattedExtras.deletable = extras.deletable;
220
- // }
221
- // if (extras.createUpdateable !== undefined) {
222
- // formattedExtras.createUpdateable = extras.createUpdateable;
223
- // }
224
- // acc[id] = {
225
- // actions: Object.keys(actions).filter((action) => actions[action]),
226
- // ...formattedExtras,
227
- // ...(integrationPermissions && {
228
- // integrationPermissions: Object.entries(integrationPermissions)
229
- // .filter(([_, allowed]) => allowed)
230
- // .map(([key]) => key),
231
- // }),
232
- // };
233
- // return acc;
234
- // }, {});
235
- // };
236
-
237
- // const getUserRoleWithPermissions = async (workspaceId, userId) => {
238
- // const cacheKey = `${CACHE_KEY_USER_PERMISSIONS_PREFIX}${workspaceId}_${userId}`;
239
- // let cachedData = await getRedisData(cacheKey);
240
-
241
- // if (cachedData && cachedData.roleWithPermissions) {
242
- // return cachedData.roleWithPermissions;
243
- // }
244
-
245
- // try {
246
- // let data = await UserRole.findOne({
247
- // workspaceId: workspaceId,
248
- // userId: userId,
249
- // })
250
- // .populate({
251
- // path: "roleId",
252
- // select:
253
- // "id name userId userShift permissionId modulePermissions defaultModule",
254
- // populate: [{ path: "permissionId", select: "id name" }],
255
- // })
256
- // .lean()
257
- // .exec();
258
-
259
- // if (!data) {
260
- // return null;
261
- // }
262
-
263
- // const roleWithPermissions = {
264
- // ...data,
265
- // roleId: data?.roleId?._id?.toString() || "",
266
- // role: data?.roleId?.name || "",
267
- // permissions:
268
- // convertPermissionsArrayToObject(
269
- // data?.roleId?.modulePermissions?.modules
270
- // ) || [],
271
- // parentRole: data?.roleId?.permissionId?.name || "",
272
- // parentRoleId: data?.roleId?.permissionId?._id?.toString() || "",
273
- // defaultModule: data?.roleId?.defaultModule || "",
274
- // };
275
-
276
- // // Store in cache with other permission data
277
- // const permissionsData = cachedData || {};
278
- // permissionsData.roleWithPermissions = roleWithPermissions;
279
- // await setRedisData(cacheKey, permissionsData, null, 0);
280
-
281
- // return roleWithPermissions;
282
- // } catch (err) {
283
- // console.error("Error in getUserRoleWithPermissions:", err);
284
- // return null;
285
- // }
286
- // };
287
-
288
- // const getUserPermissions = async (workspaceId, userId) => {
289
- // const cacheKey = `${CACHE_KEY_USER_PERMISSIONS_PREFIX}${workspaceId}_${userId}`;
290
- // let cachedData = await getRedisData(cacheKey);
291
-
292
- // if (cachedData && cachedData.permissions) {
293
- // return cachedData.permissions;
294
- // }
295
-
296
- // try {
297
- // let data = await UserRole.findOne({
298
- // workspaceId: workspaceId,
299
- // userId: userId,
300
- // })
301
- // .select("roleId userId")
302
- // .populate({
303
- // path: "roleId",
304
- // select: "modulePermissions",
305
- // })
306
- // .lean()
307
- // .exec();
308
-
309
- // if (!data) {
310
- // return null;
311
- // }
312
-
313
- // const permissions =
314
- // convertPermissionsArrayToObject(
315
- // data?.roleId?.modulePermissions?.modules
316
- // ) || null;
317
-
318
- // // Store in cache with other permission data
319
- // const permissionsData = cachedData || {};
320
- // permissionsData.permissions = permissions;
321
- // await setRedisData(cacheKey, permissionsData, null, 0);
322
-
323
- // return permissions;
324
- // } catch (err) {
325
- // console.error("Error in getUserPermissions:", err);
326
- // return null;
327
- // }
328
- // };
329
-
330
- // const getChannelsPermissions = async (workspaceId, userId) => {
331
- // const cacheKey = `${CACHE_KEY_USER_PERMISSIONS_PREFIX}${workspaceId}_${userId}`;
332
- // let cachedData = await getRedisData(cacheKey);
333
-
334
- // if (cachedData && cachedData.channelsPermissions) {
335
- // return cachedData.channelsPermissions;
336
- // }
337
-
338
- // try {
339
- // let data = await UserRole.findOne({
340
- // workspaceId: workspaceId,
341
- // userId: userId,
342
- // })
343
- // .select("roleId userId")
344
- // .populate({
345
- // path: "roleId",
346
- // select: "modulePermissions",
347
- // })
348
- // .lean()
349
- // .exec();
350
-
351
- // if (!data) {
352
- // return [];
353
- // }
354
-
355
- // const channelsPermissions =
356
- // convertPermissionsArrayToObject(
357
- // data?.roleId?.modulePermissions?.modules
358
- // )?.["conversations"]?.["integrationPermissions"] || [];
359
-
360
- // // Store in cache with other permission data
361
- // const permissionsData = cachedData || {};
362
- // permissionsData.channelsPermissions = channelsPermissions;
363
- // await setRedisData(cacheKey, permissionsData, null, 0);
364
-
365
- // return channelsPermissions;
366
- // } catch (err) {
367
- // console.error("Error in getChannelsPermissions:", err);
368
- // return [];
369
- // }
370
- // };
371
-
372
- // const findOneAndUpdateUserRole = async ({
373
- // workspaceId,
374
- // userId,
375
- // userShift,
376
- // role,
377
- // }) => {
378
- // const updatedRole = await UserRole.findOneAndUpdate(
379
- // { workspaceId, userId },
380
- // { $set: { userShift, role } },
381
- // { new: true, upsert: false }
382
- // ).exec();
383
-
384
- // if (updatedRole) {
385
- // // Update all related caches
386
- // await updateAllRelatedCaches(userId, workspaceId);
387
- // }
388
-
389
- // return updatedRole;
390
- // };
391
-
392
- // module.exports = {
393
- // createUserRole,
394
- // findUserRole,
395
- // updateUserRole,
396
- // deleteUserRoleByFilter,
397
- // deleteUserRole,
398
- // findUserWorkspaces,
399
- // getUserRoleWithPermissions,
400
- // getUserPermissions,
401
- // getChannelsPermissions,
402
- // findOneAndUpdateUserRole,
403
- // };
404
-
405
1
  const { UserRole } = require("../../models/UserRole");
406
2
  const { getRedisData, setRedisData } = require("../../config/redis");
3
+ const mongoose = require("mongoose");
407
4
 
408
5
  const defaultSelect =
409
6
  "iconUrl thumbUrl name productsCount ordersCount contact email address websiteUrl facebookUrl twitterUrl instagramUrl members defaultModule";
@@ -412,6 +9,83 @@ const defaultSelect =
412
9
  const CACHE_KEY_ALL_MEMBERS = "userroles_all_members";
413
10
  const CACHE_KEY_USER_PERMISSIONS_PREFIX = "user_permissions_";
414
11
 
12
+ // Comprehensive cache get method
13
+ const getCachedMembers = async (filter = {}) => {
14
+ try {
15
+ let members = await getRedisData(CACHE_KEY_ALL_MEMBERS);
16
+
17
+ if (!members) {
18
+ // Fetch from database if not in cache
19
+ members = await UserRole.find()
20
+ .select("userId role userShift roleId workspaceId")
21
+ .populate({
22
+ path: "roleId",
23
+ select: "id name userId userShift permissionId modulePermissions",
24
+ populate: [{ path: "permissionId", select: "id name" }],
25
+ })
26
+ .populate({
27
+ path: "userId",
28
+ match: { isDeleted: false, suspended: false },
29
+ select: "firstName lastName role email picture userShift",
30
+ })
31
+ .lean()
32
+ .exec();
33
+
34
+ // Filter out invalid members
35
+ members =
36
+ members?.filter((member) => member?.userId && member?.roleId) || [];
37
+
38
+ // Cache the result
39
+ await setRedisData(CACHE_KEY_ALL_MEMBERS, members);
40
+ }
41
+
42
+ // Apply filter in memory
43
+ return members.filter((member) =>
44
+ Object.entries(filter).every(([key, value]) => {
45
+ // Handle nested property access and comparison
46
+ const memberValue = key.includes(".")
47
+ ? key.split(".").reduce((obj, prop) => obj?.[prop], member)
48
+ : member[key];
49
+
50
+ return memberValue === value;
51
+ })
52
+ );
53
+ } catch (error) {
54
+ console.error("Error fetching cached members:", error);
55
+ return [];
56
+ }
57
+ };
58
+
59
+ // Update the cache for all members
60
+ const updateCachedMembers = async (filter = {}) => {
61
+ try {
62
+ const members = await UserRole.find(filter)
63
+ .select("userId role userShift roleId")
64
+ .populate({
65
+ path: "roleId",
66
+ select: "id name userId userShift permissionId modulePermissions",
67
+ populate: [{ path: "permissionId", select: "id name" }],
68
+ })
69
+ .populate({
70
+ path: "userId",
71
+ match: { isDeleted: false, suspended: false },
72
+ select: "firstName lastName role email picture userShift",
73
+ })
74
+ .lean()
75
+ .exec();
76
+
77
+ const validMembers =
78
+ members?.filter((member) => member?.userId && member?.roleId) || [];
79
+
80
+ await setRedisData(CACHE_KEY_ALL_MEMBERS, validMembers);
81
+
82
+ return validMembers;
83
+ } catch (error) {
84
+ console.error("Error updating cached members:", error);
85
+ return [];
86
+ }
87
+ };
88
+
415
89
  // Comprehensive cache update method
416
90
  const updateAllRelatedCaches = async (userId, workspaceId) => {
417
91
  try {
@@ -467,64 +141,27 @@ const findSingleUserRoleByFilter = async (
467
141
  .exec();
468
142
  };
469
143
 
470
- // Get cached members
471
- const getCachedMembers = async (filter = {}) => {
472
- let members = await getRedisData(CACHE_KEY_ALL_MEMBERS);
473
- if (!members) {
474
- members = await UserRole.find(filter)
475
- .select("userId role userShift roleId")
476
- .populate({
477
- path: "roleId",
478
- select: "id name userId userShift permissionId modulePermissions",
479
- populate: [{ path: "permissionId", select: "id name" }],
480
- })
481
- .populate({
482
- path: "userId",
483
- match: { isDeleted: false, suspended: false },
484
- select: "firstName lastName role email picture userShift",
485
- })
486
- .lean()
487
- .exec();
488
-
489
- await setRedisData(
490
- CACHE_KEY_ALL_MEMBERS,
491
- members?.filter((member) => member?.userId && member?.roleId),
492
- null,
493
- 3600
494
- );
495
- }
496
-
497
- // Apply filter in memory if needed
498
- return filter && Object.keys(filter).length > 0
499
- ? members.filter((member) =>
500
- Object.entries(filter).every(([key, value]) => member[key] === value)
501
- )
502
- : members;
503
- };
504
-
505
- // Update the cache for all members
506
- const updateCachedMembers = async (filter = {}) => {
507
- const members = await UserRole.find(filter)
508
- .select("userId role userShift roleId")
509
- .populate({
510
- path: "roleId",
511
- select: "id name userId userShift permissionId modulePermissions",
512
- populate: [{ path: "permissionId", select: "id name" }],
513
- })
514
- .populate({
515
- path: "userId",
516
- match: { isDeleted: false, suspended: false },
517
- select: "firstName lastName role email picture userShift",
518
- })
519
- .lean()
520
- .exec();
521
- await setRedisData(
522
- CACHE_KEY_ALL_MEMBERS,
523
- members?.filter((member) => member?.userId && member?.roleId),
524
- null,
525
- 3600
526
- );
527
- return members;
144
+ const convertPermissionsArrayToObject = (originalArray) => {
145
+ return originalArray?.reduce((acc, item) => {
146
+ const { id, actions, integrationPermissions, ...extras } = item;
147
+ const formattedExtras = {};
148
+ if (extras.deletable !== undefined) {
149
+ formattedExtras.deletable = extras.deletable;
150
+ }
151
+ if (extras.createUpdateable !== undefined) {
152
+ formattedExtras.createUpdateable = extras.createUpdateable;
153
+ }
154
+ acc[id] = {
155
+ actions: Object.keys(actions).filter((action) => actions[action]),
156
+ ...formattedExtras,
157
+ ...(integrationPermissions && {
158
+ integrationPermissions: Object.entries(integrationPermissions)
159
+ .filter(([_, allowed]) => allowed)
160
+ .map(([key]) => key),
161
+ }),
162
+ };
163
+ return acc;
164
+ }, {});
528
165
  };
529
166
 
530
167
  const createUserRole = async (data) => {
@@ -564,29 +201,21 @@ const updateUserRole = async (id, data) => {
564
201
  const updatedRole = await UserRole.findByIdAndUpdate(id, data, {
565
202
  new: true,
566
203
  }).exec();
567
-
568
204
  if (updatedRole) {
569
- // Update all related caches
570
205
  await updateAllRelatedCaches(updatedRole.userId, updatedRole.workspaceId);
571
206
  }
572
-
573
207
  return updatedRole;
574
208
  };
575
209
 
576
210
  const deleteUserRoleByFilter = async (filter) => {
577
- // Find the role before deleting to get userId and workspaceId
578
211
  const roleToDelete = await UserRole.findOne(filter).exec();
579
-
580
212
  const deletedRole = await UserRole.findOneAndDelete(filter).exec();
581
-
582
213
  if (deletedRole) {
583
- // Update all related caches
584
214
  await updateAllRelatedCaches(
585
215
  roleToDelete?.userId,
586
216
  roleToDelete?.workspaceId
587
217
  );
588
218
  }
589
-
590
219
  return deletedRole;
591
220
  };
592
221
 
@@ -594,85 +223,40 @@ const deleteUserRole = async (id) => {
594
223
  const role = await UserRole.findById(id).exec();
595
224
  const userId = role?.userId;
596
225
  const workspaceId = role?.workspaceId;
597
-
598
226
  const deletedRole = await UserRole.findByIdAndDelete(id).exec();
599
-
600
227
  if (deletedRole) {
601
- // Update all related caches
602
228
  await updateAllRelatedCaches(userId, workspaceId);
603
229
  }
604
-
605
230
  return deletedRole;
606
231
  };
607
232
 
608
233
  const findUserWorkspaces = async (userId) => {
609
- let userRoleWithWorkspaces = await getRedisData(CACHE_KEY_ALL_MEMBERS);
610
-
611
- if (!userRoleWithWorkspaces) {
612
- userRoleWithWorkspaces = await UserRole.find()
613
- .select("userId roleId workspaceId")
614
- .populate({
615
- path: "roleId",
616
- select: "id name userId userShift permissionId modulePermissions",
617
- populate: [{ path: "permissionId", select: "id name" }],
618
- })
619
- .populate({
620
- path: "workspaceId",
621
- select: defaultSelect,
622
- match: { isDeleted: false },
623
- })
624
- .lean()
625
- .exec();
626
-
627
- userRoleWithWorkspaces = userRoleWithWorkspaces
628
- ?.filter((userRole) => userRole?.workspaceId)
629
- ?.map((ur) => {
630
- return {
631
- ...ur?.workspaceId,
632
- id: ur?.workspaceId?._id?.toString(),
633
- _id: ur?.workspaceId?._id?.toString(),
634
- role: ur?.roleId?.name || "",
635
- permissions: ur?.roleId?.modulePermissions?.modules || [],
636
- };
637
- });
638
-
639
- if (userRoleWithWorkspaces) {
640
- await setRedisData(
641
- CACHE_KEY_ALL_MEMBERS,
642
- userRoleWithWorkspaces,
643
- null,
644
- 3600
645
- );
646
- }
647
- }
648
-
649
- // Filter workspaces for specific user
650
- return userRoleWithWorkspaces?.filter(
651
- (workspace) => workspace.userId?.toString() === userId.toString()
652
- );
653
- };
654
-
655
- const convertPermissionsArrayToObject = (originalArray) => {
656
- return originalArray?.reduce((acc, item) => {
657
- const { id, actions, integrationPermissions, ...extras } = item;
658
- const formattedExtras = {};
659
- if (extras.deletable !== undefined) {
660
- formattedExtras.deletable = extras.deletable;
661
- }
662
- if (extras.createUpdateable !== undefined) {
663
- formattedExtras.createUpdateable = extras.createUpdateable;
664
- }
665
- acc[id] = {
666
- actions: Object.keys(actions).filter((action) => actions[action]),
667
- ...formattedExtras,
668
- ...(integrationPermissions && {
669
- integrationPermissions: Object.entries(integrationPermissions)
670
- .filter(([_, allowed]) => allowed)
671
- .map(([key]) => key),
672
- }),
673
- };
674
- return acc;
675
- }, {});
234
+ return await UserRole.find({ userId: userId })
235
+ .select("userId roleId workspaceId")
236
+ .populate({
237
+ path: "roleId",
238
+ select: "id name userId userShift permissionId modulePermissions",
239
+ populate: [{ path: "permissionId", select: "id name" }],
240
+ })
241
+ .populate({
242
+ path: "workspaceId",
243
+ select: defaultSelect,
244
+ match: { isDeleted: false },
245
+ })
246
+ .lean()
247
+ .exec();
248
+ userRoleWithWorkspaces = userRoleWithWorkspaces
249
+ ?.filter((userRole) => userRole?.workspaceId)
250
+ ?.filter((userRole) => userRole?.roleId)
251
+ ?.map((ur) => {
252
+ return {
253
+ ...ur?.workspaceId,
254
+ id: ur?.workspaceId?._id?.toString(),
255
+ _id: ur?.workspaceId?._id?.toString(),
256
+ role: ur?.roleId?.name || "",
257
+ permissions: ur?.roleId?.modulePermissions?.modules || [],
258
+ };
259
+ });
676
260
  };
677
261
 
678
262
  const getUserRoleWithPermissions = async (workspaceId, userId) => {
@@ -717,7 +301,7 @@ const getUserRoleWithPermissions = async (workspaceId, userId) => {
717
301
  // Store in cache with other permission data
718
302
  const permissionsData = cachedData || {};
719
303
  permissionsData.roleWithPermissions = roleWithPermissions;
720
- await setRedisData(cacheKey, permissionsData, null, 0);
304
+ await setRedisData(cacheKey, permissionsData);
721
305
 
722
306
  return roleWithPermissions;
723
307
  } catch (err) {
@@ -759,7 +343,7 @@ const getUserPermissions = async (workspaceId, userId) => {
759
343
  // Store in cache with other permission data
760
344
  const permissionsData = cachedData || {};
761
345
  permissionsData.permissions = permissions;
762
- await setRedisData(cacheKey, permissionsData, null, 0);
346
+ await setRedisData(cacheKey, permissionsData);
763
347
 
764
348
  return permissions;
765
349
  } catch (err) {
@@ -771,11 +355,9 @@ const getUserPermissions = async (workspaceId, userId) => {
771
355
  const getChannelsPermissions = async (workspaceId, userId) => {
772
356
  const cacheKey = `${CACHE_KEY_USER_PERMISSIONS_PREFIX}${workspaceId}_${userId}`;
773
357
  let cachedData = await getRedisData(cacheKey);
774
-
775
358
  if (cachedData && cachedData.channelsPermissions) {
776
359
  return cachedData.channelsPermissions;
777
360
  }
778
-
779
361
  try {
780
362
  let data = await UserRole.findOne({
781
363
  workspaceId: workspaceId,
@@ -788,11 +370,9 @@ const getChannelsPermissions = async (workspaceId, userId) => {
788
370
  })
789
371
  .lean()
790
372
  .exec();
791
-
792
373
  if (!data) {
793
374
  return [];
794
375
  }
795
-
796
376
  const channelsPermissions =
797
377
  convertPermissionsArrayToObject(
798
378
  data?.roleId?.modulePermissions?.modules
@@ -801,7 +381,7 @@ const getChannelsPermissions = async (workspaceId, userId) => {
801
381
  // Store in cache with other permission data
802
382
  const permissionsData = cachedData || {};
803
383
  permissionsData.channelsPermissions = channelsPermissions;
804
- await setRedisData(cacheKey, permissionsData, 3600);
384
+ await setRedisData(cacheKey, permissionsData);
805
385
 
806
386
  return channelsPermissions;
807
387
  } catch (err) {
@@ -822,4 +402,6 @@ module.exports = {
822
402
  getChannelsPermissions,
823
403
  findOneAndUpdateUserRole,
824
404
  findSingleUserRoleByFilter,
405
+ getCachedMembers,
406
+ updateCachedMembers,
825
407
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "shuttlepro-shared",
3
- "version": "1.2.65",
3
+ "version": "1.2.66",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {