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.
Files changed (64) hide show
  1. package/common/repositories/chatMember.repository.js +9 -0
  2. package/common/repositories/customerProfile.repository.js +147 -0
  3. package/common/repositories/descriptionTemplates.repository.js +229 -0
  4. package/common/repositories/index.js +32 -0
  5. package/common/repositories/integration.repository.js +210 -0
  6. package/common/repositories/label.repository.js +95 -0
  7. package/common/repositories/notificationSettings.repository.js +95 -0
  8. package/common/repositories/role.repository.js +333 -0
  9. package/common/repositories/settings.repository.js +32 -0
  10. package/common/repositories/shipper.repository.js +77 -0
  11. package/common/repositories/socialMediaSetting.repository.js +33 -0
  12. package/common/repositories/user.repository.js +150 -0
  13. package/common/repositories/userPermission.repository.js +228 -0
  14. package/common/repositories/userRepository.js +31 -0
  15. package/common/repositories/userRole.repository.js +235 -0
  16. package/common/repositories/userRolePermission.repository.js +59 -0
  17. package/common/repositories/workspace.repository.js +147 -0
  18. package/config/bull.js +78 -0
  19. package/config/config.js +14 -0
  20. package/config/database.js +4 -0
  21. package/config/index.js +13 -0
  22. package/config/redis.js +212 -0
  23. package/config/socket.js +172 -0
  24. package/constants/index.js +15 -0
  25. package/index.js +8 -0
  26. package/models/AgentActivity.js +192 -0
  27. package/models/Assignment.js +23 -0
  28. package/models/BusinessDistribution.js +23 -0
  29. package/models/Card.js +144 -0
  30. package/models/CardComments.js +33 -0
  31. package/models/ChatMember.js +17 -0
  32. package/models/Chatbot.js +20 -0
  33. package/models/Checkpoint.js +50 -0
  34. package/models/City.js +17 -0
  35. package/models/Column.js +28 -0
  36. package/models/Conversation.js +87 -0
  37. package/models/Customer.js +36 -0
  38. package/models/CustomerProfile.js +27 -0
  39. package/models/DefaultRolePermission.js +34 -0
  40. package/models/DescriptionTemplate.js +22 -0
  41. package/models/Integration.js +51 -0
  42. package/models/Label.js +42 -0
  43. package/models/Message.js +47 -0
  44. package/models/NewProduct.js +71 -0
  45. package/models/NotificationSettings.js +130 -0
  46. package/models/Order.js +236 -0
  47. package/models/OrderProduct.js +37 -0
  48. package/models/Profile.js +127 -0
  49. package/models/Report.js +27 -0
  50. package/models/Setting.js +18 -0
  51. package/models/Shipper.js +62 -0
  52. package/models/SocialMediaSetting.js +28 -0
  53. package/models/Status.js +58 -0
  54. package/models/StatusType.js +10 -0
  55. package/models/Step.js +50 -0
  56. package/models/Type.js +25 -0
  57. package/models/UserRole.js +1 -119
  58. package/models/UserWorkflow.js +46 -0
  59. package/models/Website.js +0 -1
  60. package/models/Workspace.js +318 -0
  61. package/models.js +62 -1
  62. package/package.json +13 -2
  63. package/utils/decorator-factory.js +264 -0
  64. 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
+ };
@@ -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);
@@ -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);
@@ -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
  );