shuttlepro-shared 1.2.11 → 1.2.12
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.
|
@@ -3,10 +3,13 @@ const integrationRepository = require("./integration.repository");
|
|
|
3
3
|
const descriptionTemplateRepository = require("./descriptionTemplates.repository");
|
|
4
4
|
const shipperRepository = require("./shipper.repository");
|
|
5
5
|
const labelRepository = require("./label.repository");
|
|
6
|
+
const userRepository = require("./user.repository");
|
|
7
|
+
|
|
6
8
|
exports.module = {
|
|
7
9
|
workspaceRepository,
|
|
8
10
|
integrationRepository,
|
|
9
11
|
descriptionTemplateRepository,
|
|
10
12
|
shipperRepository,
|
|
11
13
|
labelRepository,
|
|
14
|
+
userRepository,
|
|
12
15
|
};
|
|
@@ -68,11 +68,7 @@ const findIntegrationsByWorkspace = async (workspaceId, filter = {}) => {
|
|
|
68
68
|
/**
|
|
69
69
|
* Find integration by filter (supports both workspace & non-workspace).
|
|
70
70
|
*/
|
|
71
|
-
const findIntegrationByFilter = async (
|
|
72
|
-
filter,
|
|
73
|
-
bodyFilter = {},
|
|
74
|
-
workspaceId = null
|
|
75
|
-
) => {
|
|
71
|
+
const findIntegrationByFilter = async (filter, workspaceId = null) => {
|
|
76
72
|
const allIntegrations = await getCachedAllIntegrations();
|
|
77
73
|
|
|
78
74
|
let filteredIntegrations = allIntegrations;
|
|
@@ -83,12 +79,8 @@ const findIntegrationByFilter = async (
|
|
|
83
79
|
}
|
|
84
80
|
|
|
85
81
|
return (
|
|
86
|
-
filteredIntegrations.find(
|
|
87
|
-
(
|
|
88
|
-
Object.entries(filter).every(([key, value]) => item[key] === value) &&
|
|
89
|
-
Object.entries(bodyFilter).every(
|
|
90
|
-
([key, value]) => item.body?.[key] === value
|
|
91
|
-
)
|
|
82
|
+
filteredIntegrations.find((item) =>
|
|
83
|
+
Object.entries(filter).every(([key, value]) => item.body?.[key] === value)
|
|
92
84
|
) || null
|
|
93
85
|
);
|
|
94
86
|
};
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
const { getRedisData, setRedisData } = require("../../config/redis");
|
|
2
|
+
const mongoose = require("mongoose");
|
|
3
|
+
const userSchema = require("../../models/User");
|
|
4
|
+
const User = mongoose.models.User || mongoose.model("User", userSchema);
|
|
5
|
+
|
|
6
|
+
const CACHE_KEY_ALL_USERS = "users_all";
|
|
7
|
+
|
|
8
|
+
const getCachedUsers = async () => {
|
|
9
|
+
try {
|
|
10
|
+
let users = await getRedisData(CACHE_KEY_ALL_USERS);
|
|
11
|
+
if (!users) {
|
|
12
|
+
users = await User.find().lean().exec();
|
|
13
|
+
await setRedisData(CACHE_KEY_ALL_USERS, users);
|
|
14
|
+
}
|
|
15
|
+
return users;
|
|
16
|
+
} catch (error) {
|
|
17
|
+
console.error("Error fetching cached users:", error);
|
|
18
|
+
return [];
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
const updateCachedUsers = async () => {
|
|
23
|
+
try {
|
|
24
|
+
const users = await User.find().lean().exec();
|
|
25
|
+
await setRedisData(CACHE_KEY_ALL_USERS, users);
|
|
26
|
+
} catch (error) {
|
|
27
|
+
console.error("Error updating cached users:", error);
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
const createUser = async (data) => {
|
|
32
|
+
const newUser = new User(data);
|
|
33
|
+
const savedUser = await newUser.save();
|
|
34
|
+
await updateCachedUsers();
|
|
35
|
+
return savedUser;
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
const findUserById = async (id, select = []) => {
|
|
39
|
+
try {
|
|
40
|
+
let users = await getCachedUsers();
|
|
41
|
+
let user = users.find((u) => u._id.toString() === id) || null;
|
|
42
|
+
|
|
43
|
+
if (!user) {
|
|
44
|
+
user = await User.findById(id).lean().exec();
|
|
45
|
+
if (user) await updateCachedUsers(); // Refresh cache if outdated
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
if (user && select.length > 0) {
|
|
49
|
+
return select.reduce((result, field) => {
|
|
50
|
+
if (user[field] !== undefined) result[field] = user[field];
|
|
51
|
+
return result;
|
|
52
|
+
}, {});
|
|
53
|
+
}
|
|
54
|
+
return user;
|
|
55
|
+
} catch (error) {
|
|
56
|
+
console.error("Error finding user by ID:", error);
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
const findUser = async (filter) => {
|
|
62
|
+
const users = await getCachedUsers();
|
|
63
|
+
return (
|
|
64
|
+
users.find((u) =>
|
|
65
|
+
Object.entries(filter).every(([key, value]) => u[key] === value)
|
|
66
|
+
) || null
|
|
67
|
+
);
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
const findAllUsers = async (filter = {}) => {
|
|
71
|
+
const users = await getCachedUsers();
|
|
72
|
+
return users.filter((u) =>
|
|
73
|
+
Object.entries(filter).every(([key, value]) => u[key] === value)
|
|
74
|
+
);
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
const getUserName = async (id) => {
|
|
78
|
+
const user = await findUserById(id, ["firstName", "lastName"]);
|
|
79
|
+
return user?.firstName || user?.lastName
|
|
80
|
+
? `${user.firstName} ${user.lastName}`.trim()
|
|
81
|
+
: "Unknown User";
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
const updateUser = async (id, data) => {
|
|
85
|
+
const updatedUser = await User.findByIdAndUpdate(id, data, {
|
|
86
|
+
new: true,
|
|
87
|
+
}).exec();
|
|
88
|
+
if (updatedUser) {
|
|
89
|
+
await updateCachedUsers();
|
|
90
|
+
}
|
|
91
|
+
return updatedUser;
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
const deleteUser = async (id) => {
|
|
95
|
+
const deletedUser = await User.findByIdAndDelete(id).exec();
|
|
96
|
+
if (deletedUser) {
|
|
97
|
+
await updateCachedUsers();
|
|
98
|
+
}
|
|
99
|
+
return deletedUser;
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
module.exports = {
|
|
103
|
+
createUser,
|
|
104
|
+
findUserById,
|
|
105
|
+
findUser,
|
|
106
|
+
findAllUsers,
|
|
107
|
+
getUserName,
|
|
108
|
+
updateUser,
|
|
109
|
+
deleteUser,
|
|
110
|
+
};
|