shuttlepro-shared 1.3.14 → 1.3.16
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/common/repositories/chatMember.repository.js +9 -0
- package/common/repositories/customerProfile.repository.js +147 -0
- package/common/repositories/descriptionTemplates.repository.js +229 -0
- package/common/repositories/index.js +32 -0
- package/common/repositories/integration.repository.js +210 -0
- package/common/repositories/label.repository.js +95 -0
- package/common/repositories/notificationSettings.repository.js +95 -0
- package/common/repositories/role.repository.js +333 -0
- package/common/repositories/settings.repository.js +32 -0
- package/common/repositories/shipper.repository.js +77 -0
- package/common/repositories/socialMediaSetting.repository.js +33 -0
- package/common/repositories/user.repository.js +150 -0
- package/common/repositories/userPermission.repository.js +228 -0
- package/common/repositories/userRepository.js +31 -0
- package/common/repositories/userRole.repository.js +235 -0
- package/common/repositories/userRolePermission.repository.js +59 -0
- package/common/repositories/workspace.repository.js +147 -0
- package/config/bull.js +78 -0
- package/config/config.js +14 -0
- package/config/database.js +4 -0
- package/config/index.js +13 -0
- package/config/redis.js +212 -0
- package/config/socket.js +172 -0
- package/constants/index.js +15 -0
- package/index.js +8 -0
- package/models/AgentActivity.js +192 -0
- package/models/Assignment.js +23 -0
- package/models/BusinessDistribution.js +23 -0
- package/models/Card.js +144 -0
- package/models/CardComments.js +33 -0
- package/models/ChatMember.js +17 -0
- package/models/Chatbot.js +20 -0
- package/models/Checkpoint.js +50 -0
- package/models/City.js +17 -0
- package/models/Column.js +28 -0
- package/models/Conversation.js +87 -0
- package/models/Customer.js +36 -0
- package/models/CustomerProfile.js +27 -0
- package/models/DefaultRolePermission.js +34 -0
- package/models/DescriptionTemplate.js +22 -0
- package/models/Integration.js +51 -0
- package/models/Label.js +42 -0
- package/models/Message.js +47 -0
- package/models/NewProduct.js +71 -0
- package/models/NotificationSettings.js +130 -0
- package/models/Order.js +236 -0
- package/models/OrderProduct.js +37 -0
- package/models/Profile.js +127 -0
- package/models/Report.js +27 -0
- package/models/Setting.js +18 -0
- package/models/Shipper.js +62 -0
- package/models/SocialMediaSetting.js +28 -0
- package/models/Status.js +58 -0
- package/models/StatusType.js +10 -0
- package/models/Step.js +50 -0
- package/models/Type.js +25 -0
- package/models/UserRole.js +1 -119
- package/models/UserWorkflow.js +46 -0
- package/models/Website.js +0 -1
- package/models/Workspace.js +318 -0
- package/models.js +62 -1
- package/package.json +13 -2
- package/utils/decorator-factory.js +264 -0
- package/utils/logger.js +41 -0
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
const mongoose = require("mongoose");
|
|
2
|
+
const { Schema } = mongoose;
|
|
3
|
+
const { setRedisData, getRedisData } = require("../config/redis");
|
|
4
|
+
|
|
5
|
+
const ProfileSchema = new Schema(
|
|
6
|
+
{
|
|
7
|
+
name: { type: String, default: "" },
|
|
8
|
+
userName: { type: String, default: "" },
|
|
9
|
+
profilePicture: { type: String, default: "" },
|
|
10
|
+
profileId: { type: String, default: "" },
|
|
11
|
+
isSpam: { type: Boolean, default: false },
|
|
12
|
+
workspaceId: { type: String, default: "" },
|
|
13
|
+
email: { type: String, default: "" },
|
|
14
|
+
phoneNo: { type: String, default: "" },
|
|
15
|
+
},
|
|
16
|
+
{ timestamps: true, toJSON: { virtuals: true }, toObject: { virtuals: true } }
|
|
17
|
+
);
|
|
18
|
+
const Profile = mongoose.model("Profile", ProfileSchema);
|
|
19
|
+
|
|
20
|
+
const addOrUpdateProfilesInRedis = async (profile) => {
|
|
21
|
+
try {
|
|
22
|
+
const docId = profile?._id.toString();
|
|
23
|
+
let profiles = await fetchProfiles(profile?.workspaceId);
|
|
24
|
+
const profilesMap = profiles.reduce((map, p) => {
|
|
25
|
+
map[p._id.toString()] = p;
|
|
26
|
+
return map;
|
|
27
|
+
}, {});
|
|
28
|
+
profilesMap[docId] = profile.toObject();
|
|
29
|
+
profiles = Object.values(profilesMap);
|
|
30
|
+
setRedisData(`${profile?.workspaceId}-profiles`, profiles);
|
|
31
|
+
return { code: 200 };
|
|
32
|
+
} catch (err) {
|
|
33
|
+
return { code: 400 };
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
const fetchProfiles = async (workspaceId) => {
|
|
38
|
+
try {
|
|
39
|
+
let profiles = await getRedisData(`${workspaceId}-profiles`);
|
|
40
|
+
if (!profiles || profiles.length === 0) {
|
|
41
|
+
profiles = await Profile.find({ workspaceId }).lean().exec();
|
|
42
|
+
setRedisData(`${workspaceId}-profiles`, profiles);
|
|
43
|
+
}
|
|
44
|
+
return profiles;
|
|
45
|
+
} catch (err) {
|
|
46
|
+
return [];
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
const fetchByProfileIdAndWorkspaceId = async (id, workspaceId) => {
|
|
51
|
+
try {
|
|
52
|
+
let profiles = await fetchProfiles(workspaceId);
|
|
53
|
+
let profile = profiles.find(
|
|
54
|
+
(p) =>
|
|
55
|
+
(p?.profileId === id || p._id.toString() === id.toString()) &&
|
|
56
|
+
p?.workspaceId.toString() === workspaceId.toString()
|
|
57
|
+
);
|
|
58
|
+
return profile || null;
|
|
59
|
+
} catch (err) {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
const fetchProfileByEmailAndWorkspaceId = async (
|
|
65
|
+
workspaceId,
|
|
66
|
+
userName = ""
|
|
67
|
+
) => {
|
|
68
|
+
try {
|
|
69
|
+
let profiles = await fetchProfiles(workspaceId);
|
|
70
|
+
let profile = profiles.find(
|
|
71
|
+
(p) => p?.userName === userName && p?.workspaceId === workspaceId
|
|
72
|
+
);
|
|
73
|
+
return profile || null;
|
|
74
|
+
} catch (err) {
|
|
75
|
+
console.log(err, "err");
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
const createProfile = async (obj) => {
|
|
81
|
+
try {
|
|
82
|
+
let profile = await Profile.create(obj);
|
|
83
|
+
await addOrUpdateProfilesInRedis(profile);
|
|
84
|
+
return profile;
|
|
85
|
+
} catch (err) {
|
|
86
|
+
console.log(err, "err");
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
const createUpdateProfileModified = async (filter, obj) => {
|
|
91
|
+
try {
|
|
92
|
+
let profile = await Profile.findOneAndUpdate(
|
|
93
|
+
filter,
|
|
94
|
+
{ ...obj, ...filter },
|
|
95
|
+
{
|
|
96
|
+
new: true,
|
|
97
|
+
upsert: true,
|
|
98
|
+
}
|
|
99
|
+
);
|
|
100
|
+
await addOrUpdateProfilesInRedis(profile);
|
|
101
|
+
return profile;
|
|
102
|
+
} catch (err) {
|
|
103
|
+
console.log(err, "err");
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
const updateProfile = async (query, payload) => {
|
|
108
|
+
try {
|
|
109
|
+
const profile = await Profile.findOneAndUpdate(query, payload, {
|
|
110
|
+
new: true,
|
|
111
|
+
});
|
|
112
|
+
await addOrUpdateProfilesInRedis(profile);
|
|
113
|
+
return profile;
|
|
114
|
+
} catch (err) {
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
module.exports = {
|
|
120
|
+
fetchByProfileIdAndWorkspaceId,
|
|
121
|
+
fetchProfileByEmailAndWorkspaceId,
|
|
122
|
+
createProfile,
|
|
123
|
+
updateProfile,
|
|
124
|
+
fetchProfiles,
|
|
125
|
+
Profile,
|
|
126
|
+
createUpdateProfileModified,
|
|
127
|
+
};
|
package/models/Report.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
const mongoose = require("mongoose");
|
|
2
|
+
|
|
3
|
+
const reportSchema = new mongoose.Schema(
|
|
4
|
+
{
|
|
5
|
+
workspaceId: { type: String, default: "" },
|
|
6
|
+
type: {
|
|
7
|
+
type: String,
|
|
8
|
+
default: "",
|
|
9
|
+
},
|
|
10
|
+
title: { type: String, default: "" },
|
|
11
|
+
mode: { type: String, default: "combined" },
|
|
12
|
+
displayType: { type: String, default: "table" },
|
|
13
|
+
filter: {},
|
|
14
|
+
dateRange: {
|
|
15
|
+
startDate: { type: String, default: "" },
|
|
16
|
+
endDate: { type: String, default: "" },
|
|
17
|
+
},
|
|
18
|
+
actions: [],
|
|
19
|
+
processedData: [],
|
|
20
|
+
},
|
|
21
|
+
{ timestamps: true }
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
reportSchema.index({ type: 1, workspaceId: 1 });
|
|
25
|
+
reportSchema.index({ type: 1, workspaceId: 1, title: 1 });
|
|
26
|
+
|
|
27
|
+
module.exports = mongoose.model("Report", reportSchema);
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
const { model, Schema } = require("mongoose");
|
|
2
|
+
|
|
3
|
+
const SettingSchema = new Schema(
|
|
4
|
+
{
|
|
5
|
+
workspaceId: {
|
|
6
|
+
type: Schema.Types.ObjectId,
|
|
7
|
+
ref: "Workspace",
|
|
8
|
+
default: null,
|
|
9
|
+
},
|
|
10
|
+
settings: [{ module: { type: String, default: "" }, options: {} }],
|
|
11
|
+
createdBy: { type: Schema.Types.ObjectId, ref: "User", default: null },
|
|
12
|
+
updateBy: { type: Schema.Types.ObjectId, ref: "User", default: null },
|
|
13
|
+
isDeleted: { type: Boolean, default: false },
|
|
14
|
+
},
|
|
15
|
+
{ timestamps: true, toJSON: { virtuals: true }, toObject: { virtuals: true } }
|
|
16
|
+
);
|
|
17
|
+
|
|
18
|
+
module.exports = model("Setting", SettingSchema);
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
const mongoose = require("mongoose");
|
|
2
|
+
const { Schema } = mongoose;
|
|
3
|
+
|
|
4
|
+
const shipperInformationSchema = new Schema({
|
|
5
|
+
weight: { type: Number, default: 0 }, //M&P, TRAX, INSTA, RIDER, TCS, CC
|
|
6
|
+
fragile: { type: Boolean, default: false }, //M&P, TRAX, INSTA, RIDER, TCS, CC
|
|
7
|
+
serviceType: { type: String, default: "" }, //M&P, TRAX, INSTA, RIDER, TCS, CC
|
|
8
|
+
serviceTypeId: { type: String, default: "" }, //M&P, TRAX, INSTA, RIDER, TCS, CC
|
|
9
|
+
pieces: { type: Number, default: 0 }, //M&P, TRAX, INSTA, RIDER, TCS, CC
|
|
10
|
+
originCityName: { type: String, default: "" }, //M&P, TRAX, INSTA, RIDER, TCS, CC
|
|
11
|
+
costCenterCode: { type: String, default: "" }, //M&P, TRAX, INSTA, RIDER, TCS, CC
|
|
12
|
+
remarks: { type: String, default: "" },
|
|
13
|
+
customer_note: { type: String, default: "" },
|
|
14
|
+
cityData: { type: String, default: "" },
|
|
15
|
+
return_branch: { type: String, default: "" },
|
|
16
|
+
//M&P, TRAX, INSTA, RIDER, TCS, CC
|
|
17
|
+
//TRAX
|
|
18
|
+
paymentMode: { type: Number, default: 0 },
|
|
19
|
+
addressId: { type: Number, default: 0 }, //this will not be shown
|
|
20
|
+
itemProductType: { type: Number, default: 0 },
|
|
21
|
+
shippingMode: { type: Number, default: 0 },
|
|
22
|
+
itemInsurance: { type: Boolean, default: false }, //this will not be shown
|
|
23
|
+
informationDisplay: { type: String, default: "" },
|
|
24
|
+
//Call Courier (CC)
|
|
25
|
+
shipperId: { type: Number, default: 0 }, //this will not be showm
|
|
26
|
+
shipperName: { type: String, default: "" }, //this will not be shown
|
|
27
|
+
shipperEmail: { type: String, default: "" }, //this will not be shown
|
|
28
|
+
shipperCellNo: { type: String, default: "" }, //this will not be shown
|
|
29
|
+
shipperLandlineNo: { type: String, default: "" }, //this will not be shown
|
|
30
|
+
shipperAddress: { type: String, default: "" }, //this will not be shown
|
|
31
|
+
shipperCityId: { type: Number, default: 0 }, //this will not be shown
|
|
32
|
+
shipperAreaId: { type: Number, default: 0 }, //this will not be shown
|
|
33
|
+
locationId: { type: Number, default: 0 }, //this will not be shown
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
const shipperSchema = new mongoose.Schema(
|
|
37
|
+
{
|
|
38
|
+
type: { type: String, default: "" },
|
|
39
|
+
userName: { type: String, default: "" },
|
|
40
|
+
password: { type: String, default: "" },
|
|
41
|
+
clientId: { type: String, default: "" },
|
|
42
|
+
clientSecret: { type: String, default: "" },
|
|
43
|
+
bearerToken: { type: String, default: "" },
|
|
44
|
+
accessToken: { type: String, default: "" },
|
|
45
|
+
accountNo: { type: String, default: "" },
|
|
46
|
+
businessName: { type: String, default: "" },
|
|
47
|
+
businessPhone: { type: String, default: "" },
|
|
48
|
+
businessAddress: { type: String, default: "" },
|
|
49
|
+
workspaceId: {
|
|
50
|
+
type: Schema.Types.ObjectId,
|
|
51
|
+
ref: "Workspace",
|
|
52
|
+
default: null,
|
|
53
|
+
},
|
|
54
|
+
shipperInformation: shipperInformationSchema,
|
|
55
|
+
isDeleted: { type: Boolean, default: false },
|
|
56
|
+
createdBy: { type: Schema.Types.ObjectId, ref: "User", default: null },
|
|
57
|
+
updatedBy: { type: Schema.Types.ObjectId, ref: "User", default: null },
|
|
58
|
+
},
|
|
59
|
+
{ timestamps: true, toJSON: { virtuals: true }, toObject: { virtuals: true } }
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
module.exports = mongoose.model("shipper", shipperSchema);
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
const { Schema, model } = require("mongoose");
|
|
2
|
+
const SocialMediaSettingSchema = new Schema(
|
|
3
|
+
{
|
|
4
|
+
workspaceId: {
|
|
5
|
+
type: Schema.Types.ObjectId,
|
|
6
|
+
ref: "Workspace",
|
|
7
|
+
default: null,
|
|
8
|
+
},
|
|
9
|
+
approvers: [
|
|
10
|
+
{
|
|
11
|
+
type: Schema.Types.ObjectId,
|
|
12
|
+
ref: "User",
|
|
13
|
+
default: null,
|
|
14
|
+
},
|
|
15
|
+
],
|
|
16
|
+
publishers: [
|
|
17
|
+
{
|
|
18
|
+
type: Schema.Types.ObjectId,
|
|
19
|
+
ref: "User",
|
|
20
|
+
default: null,
|
|
21
|
+
},
|
|
22
|
+
],
|
|
23
|
+
defaultApprove: { type: Boolean, default: true },
|
|
24
|
+
defaultPublish: { type: Boolean, default: true },
|
|
25
|
+
},
|
|
26
|
+
{ timestamps: true, toJSON: { virtuals: true }, toObject: { virtuals: true } }
|
|
27
|
+
);
|
|
28
|
+
module.exports = model("SocialMediaSetting", SocialMediaSettingSchema);
|
package/models/Status.js
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
const { Schema, model } = require("mongoose");
|
|
2
|
+
const { setRedisData, getRedisData } = require("../config/redis");
|
|
3
|
+
|
|
4
|
+
const StatusSchema = new Schema(
|
|
5
|
+
{
|
|
6
|
+
value: { type: String, default: "" },
|
|
7
|
+
description: { type: String, default: "" },
|
|
8
|
+
severity: { type: String, default: "1" },
|
|
9
|
+
shipperType: { type: String, default: "" },
|
|
10
|
+
internalValue: { type: String, default: "" },
|
|
11
|
+
statusTypeId: { type: Schema.Types.ObjectId, ref: "StatusType" },
|
|
12
|
+
type: { type: String, default: "" },
|
|
13
|
+
},
|
|
14
|
+
{ timestamps: true, toJSON: { virtuals: true }, toObject: { virtuals: true } }
|
|
15
|
+
);
|
|
16
|
+
|
|
17
|
+
StatusSchema.post("save", async function (doc) {
|
|
18
|
+
try {
|
|
19
|
+
addOrUpdateStatusInCache(doc);
|
|
20
|
+
} catch (err) {
|
|
21
|
+
console.log("err", err);
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
StatusSchema.post("findOneAndUpdate", async function (doc) {
|
|
26
|
+
try {
|
|
27
|
+
addOrUpdateStatusInCache(doc);
|
|
28
|
+
} catch (err) {
|
|
29
|
+
console.log("err", err);
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
const addOrUpdateStatusInCache = async (doc) => {
|
|
34
|
+
try {
|
|
35
|
+
const docId = doc?._id.toString();
|
|
36
|
+
let statuses = (await getRedisData("statuses")) || [];
|
|
37
|
+
if (!statuses || statuses.length === 0) {
|
|
38
|
+
// Fetch all statuses from the database if not found in Redis
|
|
39
|
+
const allStatuses = await model("Status").find().lean().exec();
|
|
40
|
+
statuses = allStatuses;
|
|
41
|
+
await setRedisData("statuses", statuses);
|
|
42
|
+
} else {
|
|
43
|
+
const statusesMap = statuses.reduce((map, status) => {
|
|
44
|
+
map[status._id.toString()] = status;
|
|
45
|
+
return map;
|
|
46
|
+
}, {});
|
|
47
|
+
statusesMap[docId] = doc.toObject();
|
|
48
|
+
statuses = Object.values(statusesMap);
|
|
49
|
+
await setRedisData("statuses", statuses);
|
|
50
|
+
}
|
|
51
|
+
return { code: 200 };
|
|
52
|
+
} catch (err) {
|
|
53
|
+
console.log("Error in addOrUpdateOrderInCache:", err);
|
|
54
|
+
return { code: 400 };
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
module.exports = model("Status", StatusSchema);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
const { Schema, model } = require("mongoose");
|
|
2
|
+
|
|
3
|
+
const StatusTypeSchema = new Schema(
|
|
4
|
+
{
|
|
5
|
+
name: { type: String, default: "" },
|
|
6
|
+
},
|
|
7
|
+
{ timestamps: true, toJSON: { virtuals: true }, toObject: { virtuals: true } }
|
|
8
|
+
);
|
|
9
|
+
|
|
10
|
+
module.exports = model("StatusType", StatusTypeSchema);
|
package/models/Step.js
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
const { Schema, model } = require("mongoose");
|
|
2
|
+
const StepSchema = new Schema(
|
|
3
|
+
{
|
|
4
|
+
placeholder: {
|
|
5
|
+
type: String,
|
|
6
|
+
default: "",
|
|
7
|
+
},
|
|
8
|
+
input: {
|
|
9
|
+
isRequire: {
|
|
10
|
+
type: Boolean,
|
|
11
|
+
default: false,
|
|
12
|
+
},
|
|
13
|
+
hint: {
|
|
14
|
+
type: String,
|
|
15
|
+
default: "",
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
apiCall: {
|
|
19
|
+
type: String,
|
|
20
|
+
default: "",
|
|
21
|
+
},
|
|
22
|
+
templateId: {
|
|
23
|
+
type: Schema.Types.ObjectId,
|
|
24
|
+
ref: "DescriptionTemplate",
|
|
25
|
+
default: null,
|
|
26
|
+
},
|
|
27
|
+
// module: {
|
|
28
|
+
// type: String,
|
|
29
|
+
// enum: ["product", "order", "customer", "general"],
|
|
30
|
+
// default: "general",
|
|
31
|
+
// },
|
|
32
|
+
parentId: {
|
|
33
|
+
type: Schema.Types.ObjectId,
|
|
34
|
+
ref: "Step",
|
|
35
|
+
default: null,
|
|
36
|
+
},
|
|
37
|
+
sortNumber: {
|
|
38
|
+
type: Number,
|
|
39
|
+
default: 0,
|
|
40
|
+
},
|
|
41
|
+
workspaceId: {
|
|
42
|
+
type: Schema.Types.ObjectId,
|
|
43
|
+
ref: "Workspace",
|
|
44
|
+
default: null,
|
|
45
|
+
},
|
|
46
|
+
chatbotId: { type: Schema.Types.ObjectId, ref: "Chatbot", default: null },
|
|
47
|
+
},
|
|
48
|
+
{ timestamps: true, toJSON: { virtuals: true }, toObject: { virtuals: true } }
|
|
49
|
+
);
|
|
50
|
+
module.exports = model("Step", StepSchema);
|
package/models/Type.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
const mongoose = require("mongoose");
|
|
2
|
+
|
|
3
|
+
const typeSchema = new mongoose.Schema(
|
|
4
|
+
{
|
|
5
|
+
title: {
|
|
6
|
+
type: String,
|
|
7
|
+
required: true,
|
|
8
|
+
},
|
|
9
|
+
deleted: {
|
|
10
|
+
type: Boolean,
|
|
11
|
+
default: false,
|
|
12
|
+
},
|
|
13
|
+
workspaceId: { type: String, default: "" },
|
|
14
|
+
color: { type: String, default: "#4a90e2", required: true },
|
|
15
|
+
},
|
|
16
|
+
{ timestamps: true, toJSON: { virtuals: true }, toObject: { virtuals: true } }
|
|
17
|
+
);
|
|
18
|
+
|
|
19
|
+
typeSchema.virtual("cardList", {
|
|
20
|
+
ref: "Card",
|
|
21
|
+
localField: "_id",
|
|
22
|
+
foreignField: "typeId",
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
module.exports = mongoose.model("Type", typeSchema);
|
package/models/UserRole.js
CHANGED
|
@@ -1,15 +1,6 @@
|
|
|
1
1
|
const mongoose = require("mongoose");
|
|
2
2
|
const { Schema } = mongoose;
|
|
3
3
|
|
|
4
|
-
const daySchema = new Schema({
|
|
5
|
-
day: { type: String, required: true },
|
|
6
|
-
startTime: { type: String, required: false },
|
|
7
|
-
endTime: { type: String, required: false },
|
|
8
|
-
breakStartTime: { type: String, required: false },
|
|
9
|
-
breakEndTime: { type: String, required: false },
|
|
10
|
-
lateThreshold: { type: String, required: false },
|
|
11
|
-
});
|
|
12
|
-
|
|
13
4
|
const userRoleSchema = new Schema(
|
|
14
5
|
{
|
|
15
6
|
userId: {
|
|
@@ -32,10 +23,7 @@ const userRoleSchema = new Schema(
|
|
|
32
23
|
default: null,
|
|
33
24
|
},
|
|
34
25
|
isOwner: { type: Boolean, default: false },
|
|
35
|
-
userShift: {
|
|
36
|
-
shiftName: { type: String, required: false },
|
|
37
|
-
days: { type: [daySchema], required: false },
|
|
38
|
-
},
|
|
26
|
+
userShift: { type: Object, default: null },
|
|
39
27
|
createdBy: {
|
|
40
28
|
type: mongoose.Schema.Types.ObjectId,
|
|
41
29
|
ref: "User",
|
|
@@ -52,112 +40,6 @@ const userRoleSchema = new Schema(
|
|
|
52
40
|
|
|
53
41
|
const UserRole = mongoose.model("UserRole", userRoleSchema);
|
|
54
42
|
|
|
55
|
-
const convertPermissionsArrayToObject = (originalArray) => {
|
|
56
|
-
return originalArray?.reduce((acc, item) => {
|
|
57
|
-
const { id, actions, integrationPermissions, ...extras } = item;
|
|
58
|
-
const formattedExtras = {};
|
|
59
|
-
if (extras.deletable !== undefined) {
|
|
60
|
-
formattedExtras.deletable = extras.deletable;
|
|
61
|
-
}
|
|
62
|
-
if (extras.createUpdateable !== undefined) {
|
|
63
|
-
formattedExtras.createUpdateable = extras.createUpdateable;
|
|
64
|
-
}
|
|
65
|
-
acc[id] = {
|
|
66
|
-
actions: Object.keys(actions).filter((action) => actions[action]),
|
|
67
|
-
...formattedExtras,
|
|
68
|
-
...(integrationPermissions && {
|
|
69
|
-
integrationPermissions: Object.entries(integrationPermissions)
|
|
70
|
-
.filter(([_, allowed]) => allowed)
|
|
71
|
-
.map(([key]) => key),
|
|
72
|
-
}),
|
|
73
|
-
};
|
|
74
|
-
return acc;
|
|
75
|
-
}, {});
|
|
76
|
-
};
|
|
77
|
-
|
|
78
|
-
const getUserRoleWithPermissions = async (workspaceId, userId) => {
|
|
79
|
-
try {
|
|
80
|
-
let data = await UserRole.findOne({
|
|
81
|
-
workspaceId: workspaceId,
|
|
82
|
-
userId: userId,
|
|
83
|
-
})
|
|
84
|
-
.populate({
|
|
85
|
-
path: "roleId",
|
|
86
|
-
select:
|
|
87
|
-
"id name userId userShift permissionId modulePermissions defaultModule",
|
|
88
|
-
populate: [{ path: "permissionId", select: "id name" }],
|
|
89
|
-
})
|
|
90
|
-
.lean()
|
|
91
|
-
.exec();
|
|
92
|
-
return {
|
|
93
|
-
...data,
|
|
94
|
-
roleId: data?.roleId?._id?.toString() || "",
|
|
95
|
-
role: data?.roleId?.name || "",
|
|
96
|
-
permissions:
|
|
97
|
-
convertPermissionsArrayToObject(
|
|
98
|
-
data?.roleId?.modulePermissions?.modules
|
|
99
|
-
) || [],
|
|
100
|
-
parentRole: data?.roleId?.permissionId?.name || "",
|
|
101
|
-
parentRoleId: data?.roleId?.permissionId?._id?.toString() || "",
|
|
102
|
-
defaultModule: data?.roleId?.defaultModule || "",
|
|
103
|
-
};
|
|
104
|
-
} catch (err) {
|
|
105
|
-
console.error("Error in getUserRole:", err);
|
|
106
|
-
return null;
|
|
107
|
-
}
|
|
108
|
-
};
|
|
109
|
-
|
|
110
|
-
const getUserPermissions = async (workspaceId, userId) => {
|
|
111
|
-
try {
|
|
112
|
-
let data = await UserRole.findOne({
|
|
113
|
-
workspaceId: workspaceId,
|
|
114
|
-
userId: userId,
|
|
115
|
-
})
|
|
116
|
-
.select("roleId userId")
|
|
117
|
-
.populate({
|
|
118
|
-
path: "roleId",
|
|
119
|
-
select: "modulePermissions",
|
|
120
|
-
})
|
|
121
|
-
.lean()
|
|
122
|
-
.exec();
|
|
123
|
-
return (
|
|
124
|
-
convertPermissionsArrayToObject(
|
|
125
|
-
data?.roleId?.modulePermissions?.modules
|
|
126
|
-
) || null
|
|
127
|
-
);
|
|
128
|
-
} catch (err) {
|
|
129
|
-
console.error("Error in getUserRole:", err);
|
|
130
|
-
return null;
|
|
131
|
-
}
|
|
132
|
-
};
|
|
133
|
-
|
|
134
|
-
const getChannelsPermissions = async (workspaceId, userId) => {
|
|
135
|
-
try {
|
|
136
|
-
let data = await UserRole.findOne({
|
|
137
|
-
workspaceId: workspaceId,
|
|
138
|
-
userId: userId,
|
|
139
|
-
})
|
|
140
|
-
.select("roleId userId")
|
|
141
|
-
.populate({
|
|
142
|
-
path: "roleId",
|
|
143
|
-
select: "modulePermissions",
|
|
144
|
-
})
|
|
145
|
-
.lean()
|
|
146
|
-
.exec();
|
|
147
|
-
return (
|
|
148
|
-
convertPermissionsArrayToObject(
|
|
149
|
-
data?.roleId?.modulePermissions?.modules
|
|
150
|
-
)?.["conversations"]?.["integrationPermissions"] || []
|
|
151
|
-
);
|
|
152
|
-
} catch (err) {
|
|
153
|
-
console.error("Error in getUserRole:", err);
|
|
154
|
-
return null;
|
|
155
|
-
}
|
|
156
|
-
};
|
|
157
|
-
|
|
158
43
|
module.exports = {
|
|
159
44
|
UserRole,
|
|
160
|
-
getChannelsPermissions,
|
|
161
|
-
getUserPermissions,
|
|
162
|
-
getUserRoleWithPermissions,
|
|
163
45
|
};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
const mongoose = require("mongoose");
|
|
2
|
+
const { Schema } = mongoose;
|
|
3
|
+
|
|
4
|
+
const userWorkflow = new Schema(
|
|
5
|
+
{
|
|
6
|
+
workspaceId: {
|
|
7
|
+
type: Schema.Types.ObjectId,
|
|
8
|
+
default: null,
|
|
9
|
+
ref: "Workspace",
|
|
10
|
+
},
|
|
11
|
+
workflow: {},
|
|
12
|
+
receiverId: {
|
|
13
|
+
type: String,
|
|
14
|
+
default: "",
|
|
15
|
+
},
|
|
16
|
+
whatsappTemplateData: {},
|
|
17
|
+
whatsappTemplate: {},
|
|
18
|
+
targetPayload: {},
|
|
19
|
+
business: {},
|
|
20
|
+
sender: {},
|
|
21
|
+
currentRetry: {
|
|
22
|
+
type: Number,
|
|
23
|
+
default: 0,
|
|
24
|
+
},
|
|
25
|
+
currentAction: {
|
|
26
|
+
type: String,
|
|
27
|
+
default: "",
|
|
28
|
+
},
|
|
29
|
+
lastMessage: {
|
|
30
|
+
type: String,
|
|
31
|
+
default: "",
|
|
32
|
+
},
|
|
33
|
+
status: {
|
|
34
|
+
type: String,
|
|
35
|
+
default: "pending",
|
|
36
|
+
},
|
|
37
|
+
otherTypeEvent: {
|
|
38
|
+
type: Boolean,
|
|
39
|
+
default: false,
|
|
40
|
+
},
|
|
41
|
+
allActions: [],
|
|
42
|
+
},
|
|
43
|
+
{ timestamps: true, toJSON: { virtuals: true }, toObject: { virtuals: true } }
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
module.exports = mongoose.model("UserWorkflow", userWorkflow);
|
package/models/Website.js
CHANGED
|
@@ -29,7 +29,6 @@ const websiteSchema = new mongoose.Schema(
|
|
|
29
29
|
},
|
|
30
30
|
importStatus: { type: Boolean, default: false },
|
|
31
31
|
mode: { type: String, default: "read" },
|
|
32
|
-
details: { type: mongoose.Schema.Types.Mixed, default: {} },
|
|
33
32
|
},
|
|
34
33
|
{ timestamps: true, toJSON: { virtuals: true }, toObject: { virtuals: true } }
|
|
35
34
|
);
|