shuttlepro-shared 1.2.65 → 1.2.67

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,407 +1,3 @@
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");
407
3
 
@@ -412,6 +8,83 @@ const defaultSelect =
412
8
  const CACHE_KEY_ALL_MEMBERS = "userroles_all_members";
413
9
  const CACHE_KEY_USER_PERMISSIONS_PREFIX = "user_permissions_";
414
10
 
11
+ // Comprehensive cache get method
12
+ const getCachedMembers = async (filter = {}) => {
13
+ try {
14
+ let members = await getRedisData(CACHE_KEY_ALL_MEMBERS);
15
+
16
+ if (!members) {
17
+ // Fetch from database if not in cache
18
+ members = await UserRole.find()
19
+ .select("userId role userShift roleId workspaceId")
20
+ .populate({
21
+ path: "roleId",
22
+ select: "id name userId userShift permissionId modulePermissions",
23
+ populate: [{ path: "permissionId", select: "id name" }],
24
+ })
25
+ .populate({
26
+ path: "userId",
27
+ match: { isDeleted: false, suspended: false },
28
+ select: "firstName lastName role email picture userShift",
29
+ })
30
+ .lean()
31
+ .exec();
32
+
33
+ // Filter out invalid members
34
+ members =
35
+ members?.filter((member) => member?.userId && member?.roleId) || [];
36
+
37
+ // Cache the result
38
+ await setRedisData(CACHE_KEY_ALL_MEMBERS, members);
39
+ }
40
+
41
+ // Apply filter in memory
42
+ return members.filter((member) =>
43
+ Object.entries(filter).every(([key, value]) => {
44
+ // Handle nested property access and comparison
45
+ const memberValue = key.includes(".")
46
+ ? key.split(".").reduce((obj, prop) => obj?.[prop], member)
47
+ : member[key];
48
+
49
+ return memberValue === value;
50
+ })
51
+ );
52
+ } catch (error) {
53
+ console.error("Error fetching cached members:", error);
54
+ return [];
55
+ }
56
+ };
57
+
58
+ // Update the cache for all members
59
+ const updateCachedMembers = async (filter = {}) => {
60
+ try {
61
+ const members = await UserRole.find(filter)
62
+ .select("userId role userShift roleId")
63
+ .populate({
64
+ path: "roleId",
65
+ select: "id name userId userShift permissionId modulePermissions",
66
+ populate: [{ path: "permissionId", select: "id name" }],
67
+ })
68
+ .populate({
69
+ path: "userId",
70
+ match: { isDeleted: false, suspended: false },
71
+ select: "firstName lastName role email picture userShift",
72
+ })
73
+ .lean()
74
+ .exec();
75
+
76
+ const validMembers =
77
+ members?.filter((member) => member?.userId && member?.roleId) || [];
78
+
79
+ await setRedisData(CACHE_KEY_ALL_MEMBERS, validMembers);
80
+
81
+ return validMembers;
82
+ } catch (error) {
83
+ console.error("Error updating cached members:", error);
84
+ return [];
85
+ }
86
+ };
87
+
415
88
  // Comprehensive cache update method
416
89
  const updateAllRelatedCaches = async (userId, workspaceId) => {
417
90
  try {
@@ -467,64 +140,27 @@ const findSingleUserRoleByFilter = async (
467
140
  .exec();
468
141
  };
469
142
 
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;
143
+ const convertPermissionsArrayToObject = (originalArray) => {
144
+ return originalArray?.reduce((acc, item) => {
145
+ const { id, actions, integrationPermissions, ...extras } = item;
146
+ const formattedExtras = {};
147
+ if (extras.deletable !== undefined) {
148
+ formattedExtras.deletable = extras.deletable;
149
+ }
150
+ if (extras.createUpdateable !== undefined) {
151
+ formattedExtras.createUpdateable = extras.createUpdateable;
152
+ }
153
+ acc[id] = {
154
+ actions: Object.keys(actions).filter((action) => actions[action]),
155
+ ...formattedExtras,
156
+ ...(integrationPermissions && {
157
+ integrationPermissions: Object.entries(integrationPermissions)
158
+ .filter(([_, allowed]) => allowed)
159
+ .map(([key]) => key),
160
+ }),
161
+ };
162
+ return acc;
163
+ }, {});
528
164
  };
529
165
 
530
166
  const createUserRole = async (data) => {
@@ -564,29 +200,21 @@ const updateUserRole = async (id, data) => {
564
200
  const updatedRole = await UserRole.findByIdAndUpdate(id, data, {
565
201
  new: true,
566
202
  }).exec();
567
-
568
203
  if (updatedRole) {
569
- // Update all related caches
570
204
  await updateAllRelatedCaches(updatedRole.userId, updatedRole.workspaceId);
571
205
  }
572
-
573
206
  return updatedRole;
574
207
  };
575
208
 
576
209
  const deleteUserRoleByFilter = async (filter) => {
577
- // Find the role before deleting to get userId and workspaceId
578
210
  const roleToDelete = await UserRole.findOne(filter).exec();
579
-
580
211
  const deletedRole = await UserRole.findOneAndDelete(filter).exec();
581
-
582
212
  if (deletedRole) {
583
- // Update all related caches
584
213
  await updateAllRelatedCaches(
585
214
  roleToDelete?.userId,
586
215
  roleToDelete?.workspaceId
587
216
  );
588
217
  }
589
-
590
218
  return deletedRole;
591
219
  };
592
220
 
@@ -594,85 +222,41 @@ const deleteUserRole = async (id) => {
594
222
  const role = await UserRole.findById(id).exec();
595
223
  const userId = role?.userId;
596
224
  const workspaceId = role?.workspaceId;
597
-
598
225
  const deletedRole = await UserRole.findByIdAndDelete(id).exec();
599
-
600
226
  if (deletedRole) {
601
- // Update all related caches
602
227
  await updateAllRelatedCaches(userId, workspaceId);
603
228
  }
604
-
605
229
  return deletedRole;
606
230
  };
607
231
 
608
232
  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
- }, {});
233
+ let userRoleWithWorkspaces = await UserRole.find({ userId: userId })
234
+ .select("userId roleId workspaceId")
235
+ .populate({
236
+ path: "roleId",
237
+ select: "id name userId userShift permissionId modulePermissions",
238
+ populate: [{ path: "permissionId", select: "id name" }],
239
+ })
240
+ .populate({
241
+ path: "workspaceId",
242
+ select: defaultSelect,
243
+ match: { isDeleted: false },
244
+ })
245
+ .lean()
246
+ .exec();
247
+ userRoleWithWorkspaces = userRoleWithWorkspaces
248
+ ?.filter((userRole) => userRole?.workspaceId)
249
+ ?.filter((userRole) => userRole?.roleId)
250
+ ?.map((ur) => {
251
+ return {
252
+ ...ur?.workspaceId,
253
+ id: ur?.workspaceId?._id?.toString(),
254
+ _id: ur?.workspaceId?._id?.toString(),
255
+ role: ur?.roleId?.name || "",
256
+ permissions: ur?.roleId?.modulePermissions?.modules || [],
257
+ };
258
+ });
259
+ return userRoleWithWorkspaces || [];
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) {
@@ -727,41 +311,16 @@ const getUserRoleWithPermissions = async (workspaceId, userId) => {
727
311
  };
728
312
 
729
313
  const getUserPermissions = async (workspaceId, userId) => {
730
- const cacheKey = `${CACHE_KEY_USER_PERMISSIONS_PREFIX}${workspaceId}_${userId}`;
731
- let cachedData = await getRedisData(cacheKey);
732
-
733
- if (cachedData && cachedData.permissions) {
734
- return cachedData.permissions;
735
- }
736
-
737
314
  try {
738
- let data = await UserRole.findOne({
739
- workspaceId: workspaceId,
740
- userId: userId,
741
- })
742
- .select("roleId userId")
743
- .populate({
744
- path: "roleId",
745
- select: "modulePermissions",
746
- })
747
- .lean()
748
- .exec();
749
-
750
- if (!data) {
751
- return null;
315
+ let members = await getCachedMembers({ workspaceId, userId });
316
+ console.log(members, "members");
317
+ if (members?.length) {
318
+ const permissions =
319
+ convertPermissionsArrayToObject(
320
+ members?.[0]?.roleId?.modulePermissions?.modules
321
+ ) || null;
752
322
  }
753
-
754
- const permissions =
755
- convertPermissionsArrayToObject(
756
- data?.roleId?.modulePermissions?.modules
757
- ) || null;
758
-
759
- // Store in cache with other permission data
760
- const permissionsData = cachedData || {};
761
- permissionsData.permissions = permissions;
762
- await setRedisData(cacheKey, permissionsData, null, 0);
763
-
764
- return permissions;
323
+ return permissions || null;
765
324
  } catch (err) {
766
325
  console.error("Error in getUserPermissions:", err);
767
326
  return null;
@@ -771,11 +330,9 @@ const getUserPermissions = async (workspaceId, userId) => {
771
330
  const getChannelsPermissions = async (workspaceId, userId) => {
772
331
  const cacheKey = `${CACHE_KEY_USER_PERMISSIONS_PREFIX}${workspaceId}_${userId}`;
773
332
  let cachedData = await getRedisData(cacheKey);
774
-
775
333
  if (cachedData && cachedData.channelsPermissions) {
776
334
  return cachedData.channelsPermissions;
777
335
  }
778
-
779
336
  try {
780
337
  let data = await UserRole.findOne({
781
338
  workspaceId: workspaceId,
@@ -788,11 +345,9 @@ const getChannelsPermissions = async (workspaceId, userId) => {
788
345
  })
789
346
  .lean()
790
347
  .exec();
791
-
792
348
  if (!data) {
793
349
  return [];
794
350
  }
795
-
796
351
  const channelsPermissions =
797
352
  convertPermissionsArrayToObject(
798
353
  data?.roleId?.modulePermissions?.modules
@@ -801,7 +356,7 @@ const getChannelsPermissions = async (workspaceId, userId) => {
801
356
  // Store in cache with other permission data
802
357
  const permissionsData = cachedData || {};
803
358
  permissionsData.channelsPermissions = channelsPermissions;
804
- await setRedisData(cacheKey, permissionsData, 3600);
359
+ await setRedisData(cacheKey, permissionsData);
805
360
 
806
361
  return channelsPermissions;
807
362
  } catch (err) {
@@ -822,4 +377,6 @@ module.exports = {
822
377
  getChannelsPermissions,
823
378
  findOneAndUpdateUserRole,
824
379
  findSingleUserRoleByFilter,
380
+ getCachedMembers,
381
+ updateCachedMembers,
825
382
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "shuttlepro-shared",
3
- "version": "1.2.65",
3
+ "version": "1.2.67",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {