shuttlepro-shared 1.1.80 → 1.1.82
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/constants/index.js +0 -15
- package/index.js +0 -8
- package/models/Role.js +29 -0
- package/models/UserPermission.js +5 -0
- package/models/UserRole.js +10 -3
- package/models.js +2 -46
- package/package.json +2 -13
- package/common/repositories/index.js +0 -4
- package/common/repositories/integration.repository.js +0 -168
- package/common/repositories/workspace.repository.js +0 -95
- package/config/bull.js +0 -78
- package/config/config.js +0 -14
- package/config/database.js +0 -7
- package/config/index.js +0 -13
- package/config/redis.js +0 -162
- package/config/socket.js +0 -172
- package/models/AgentActivity.js +0 -189
- package/models/Assignment.js +0 -23
- package/models/BusinessDistribution.js +0 -23
- package/models/Card.js +0 -144
- package/models/CardComments.js +0 -33
- package/models/Checkpoint.js +0 -50
- package/models/City.js +0 -17
- package/models/Column.js +0 -28
- package/models/Conversation.js +0 -84
- package/models/Customer.js +0 -35
- package/models/DescriptionTemplate.js +0 -22
- package/models/Integration.js +0 -53
- package/models/Label.js +0 -42
- package/models/Message.js +0 -47
- package/models/Order.js +0 -131
- package/models/OrderProduct.js +0 -37
- package/models/Profile.js +0 -127
- package/models/Report.js +0 -27
- package/models/Shipper.js +0 -52
- package/models/Status.js +0 -58
- package/models/StatusType.js +0 -10
- package/models/Type.js +0 -25
- package/models/Workspace.js +0 -190
- package/utils/decorator-factory.js +0 -264
- package/utils/logger.js +0 -41
package/models/Profile.js
DELETED
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
const mongoose = require("mongoose");
|
|
2
|
-
const { Schema } = mongoose;
|
|
3
|
-
const { setRedisData, getRedisData } = require("../utils");
|
|
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
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
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);
|
package/models/Shipper.js
DELETED
|
@@ -1,52 +0,0 @@
|
|
|
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
|
-
remarks: { type: String, default: "" },
|
|
12
|
-
customer_note: { type: String, default: "" },
|
|
13
|
-
cityData: { type: String, default: "" },
|
|
14
|
-
return_branch: { type: String, default: "" },
|
|
15
|
-
//M&P, TRAX, INSTA, RIDER, TCS, CC
|
|
16
|
-
//TRAX
|
|
17
|
-
paymentMode: { type: Number, default: 0 },
|
|
18
|
-
addressId: { type: Number, default: 0 }, //this will not be shown
|
|
19
|
-
itemProductType: { type: Number, default: 0 },
|
|
20
|
-
shippingMode: { type: Number, default: 0 },
|
|
21
|
-
itemInsurance: { type: Boolean, default: false }, //this will not be shown
|
|
22
|
-
informationDisplay: { type: String, default: "" },
|
|
23
|
-
//Call Courier (CC)
|
|
24
|
-
shipperName: { type: String, default: "" }, //this will not be shown
|
|
25
|
-
shipperEmail: { type: String, default: "" }, //this will not be shown
|
|
26
|
-
shipperCellNo: { type: String, default: "" }, //this will not be shown
|
|
27
|
-
shipperLandlineNo: { type: String, default: "" }, //this will not be shown
|
|
28
|
-
shipperAddress: { type: String, default: "" }, //this will not be shown
|
|
29
|
-
shipperCityId: { type: Number, default: 0 }, //this will not be shown
|
|
30
|
-
shipperAreaId: { type: Number, default: 0 }, //this will not be shown
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
const shipperSchema = new mongoose.Schema(
|
|
34
|
-
{
|
|
35
|
-
type: { type: String, default: "" },
|
|
36
|
-
userName: { type: String, default: "" },
|
|
37
|
-
password: { type: String, default: "" },
|
|
38
|
-
clientId: { type: String, default: "" },
|
|
39
|
-
workspaceId: {
|
|
40
|
-
type: Schema.Types.ObjectId,
|
|
41
|
-
ref: "Workspace",
|
|
42
|
-
default: null,
|
|
43
|
-
},
|
|
44
|
-
shipperInformation: shipperInformationSchema,
|
|
45
|
-
isDeleted: { type: Boolean, default: false },
|
|
46
|
-
createdBy: { type: Schema.Types.ObjectId, ref: "User", default: null },
|
|
47
|
-
updatedBy: { type: Schema.Types.ObjectId, ref: "User", default: null },
|
|
48
|
-
},
|
|
49
|
-
{ timestamps: true, toJSON: { virtuals: true }, toObject: { virtuals: true } }
|
|
50
|
-
);
|
|
51
|
-
|
|
52
|
-
module.exports = mongoose.model("shipper", shipperSchema);
|
package/models/Status.js
DELETED
|
@@ -1,58 +0,0 @@
|
|
|
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);
|
package/models/StatusType.js
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
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/Type.js
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
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/Workspace.js
DELETED
|
@@ -1,190 +0,0 @@
|
|
|
1
|
-
const mongoose = require("mongoose");
|
|
2
|
-
|
|
3
|
-
const shiftSchema = new mongoose.Schema({
|
|
4
|
-
_id: {
|
|
5
|
-
type: mongoose.Schema.Types.ObjectId,
|
|
6
|
-
default: mongoose.Types.ObjectId,
|
|
7
|
-
},
|
|
8
|
-
shiftName: {
|
|
9
|
-
type: String,
|
|
10
|
-
required: true,
|
|
11
|
-
},
|
|
12
|
-
days: [
|
|
13
|
-
{
|
|
14
|
-
day: { type: String, required: true },
|
|
15
|
-
startTime: { type: String, required: true },
|
|
16
|
-
endTime: { type: String, required: true },
|
|
17
|
-
breakStartTime: { type: String, required: false },
|
|
18
|
-
breakEndTime: { type: String, required: false },
|
|
19
|
-
lateThreshold: { type: String, required: false },
|
|
20
|
-
},
|
|
21
|
-
],
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
const scoreThresholdSchema = new mongoose.Schema({
|
|
25
|
-
operator: {
|
|
26
|
-
type: mongoose.Schema.Types.Mixed,
|
|
27
|
-
required: false,
|
|
28
|
-
},
|
|
29
|
-
value: {
|
|
30
|
-
type: mongoose.Schema.Types.Mixed,
|
|
31
|
-
required: true,
|
|
32
|
-
},
|
|
33
|
-
score: {
|
|
34
|
-
type: Number,
|
|
35
|
-
required: false,
|
|
36
|
-
},
|
|
37
|
-
additionalFields: {
|
|
38
|
-
type: mongoose.Schema.Types.Mixed,
|
|
39
|
-
default: {},
|
|
40
|
-
},
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
const kpiSchema = new mongoose.Schema({
|
|
44
|
-
weight: {
|
|
45
|
-
type: Number,
|
|
46
|
-
required: true,
|
|
47
|
-
},
|
|
48
|
-
scoreThresholds: {
|
|
49
|
-
type: [scoreThresholdSchema],
|
|
50
|
-
default: [],
|
|
51
|
-
},
|
|
52
|
-
relativeGrading: {
|
|
53
|
-
type: Boolean,
|
|
54
|
-
default: false,
|
|
55
|
-
},
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
const workspaceSchema = new mongoose.Schema(
|
|
59
|
-
{
|
|
60
|
-
name: {
|
|
61
|
-
type: String,
|
|
62
|
-
required: true,
|
|
63
|
-
trim: true,
|
|
64
|
-
},
|
|
65
|
-
iconUrl: { type: String, default: "" },
|
|
66
|
-
thumbUrl: { type: String, default: "" },
|
|
67
|
-
createdBy: {
|
|
68
|
-
type: mongoose.Schema.Types.ObjectId,
|
|
69
|
-
ref: "User",
|
|
70
|
-
default: null,
|
|
71
|
-
},
|
|
72
|
-
updatedBy: {
|
|
73
|
-
type: mongoose.Schema.Types.ObjectId,
|
|
74
|
-
ref: "User",
|
|
75
|
-
default: null,
|
|
76
|
-
},
|
|
77
|
-
productsCount: { type: Number, default: 0 },
|
|
78
|
-
ordersCount: { type: Number, default: 0 },
|
|
79
|
-
shippers: [{ type: String, trim: true }],
|
|
80
|
-
socialProfiles: [],
|
|
81
|
-
shiftConfigurations: [shiftSchema],
|
|
82
|
-
kpiConfiguration: {
|
|
83
|
-
type: Map,
|
|
84
|
-
of: kpiSchema,
|
|
85
|
-
default: {},
|
|
86
|
-
},
|
|
87
|
-
members: [],
|
|
88
|
-
contact: String,
|
|
89
|
-
email: String,
|
|
90
|
-
address: String,
|
|
91
|
-
websiteUrl: String,
|
|
92
|
-
facebookUrl: String,
|
|
93
|
-
twitterUrl: String,
|
|
94
|
-
instagramUrl: String,
|
|
95
|
-
isDeleted: { type: Boolean, default: false },
|
|
96
|
-
businessHours: {
|
|
97
|
-
startTime: { type: String, default: "" },
|
|
98
|
-
endTime: { type: String, default: "" },
|
|
99
|
-
},
|
|
100
|
-
remarks: [
|
|
101
|
-
{
|
|
102
|
-
reason: { type: String, default: "" },
|
|
103
|
-
type: { type: String, default: "" },
|
|
104
|
-
},
|
|
105
|
-
],
|
|
106
|
-
chatGptApiKey: String,
|
|
107
|
-
skuSeparator: { type: String, default: "-" },
|
|
108
|
-
uniqueNo: { type: Number, default: 0 },
|
|
109
|
-
webhookStatus: { type: String, default: "" },
|
|
110
|
-
businessCategory: { type: String, default: "" },
|
|
111
|
-
numberOfProducts: { type: Number, default: 0 },
|
|
112
|
-
monthlyOrders: { type: Number, default: 0 },
|
|
113
|
-
queueTracking: { type: Boolean, default: false },
|
|
114
|
-
orderConfiguration: { type: String, default: "" },
|
|
115
|
-
defaultModule: { type: String, default: "dashboard" },
|
|
116
|
-
dynamicFieldsTemplate: [
|
|
117
|
-
{
|
|
118
|
-
groupName: { type: String, required: true, trim: true },
|
|
119
|
-
fields: [
|
|
120
|
-
{
|
|
121
|
-
fieldName: {
|
|
122
|
-
type: String,
|
|
123
|
-
required: true,
|
|
124
|
-
trim: true,
|
|
125
|
-
},
|
|
126
|
-
required: {
|
|
127
|
-
type: Boolean,
|
|
128
|
-
default: false,
|
|
129
|
-
},
|
|
130
|
-
enabled: {
|
|
131
|
-
type: Boolean,
|
|
132
|
-
default: true,
|
|
133
|
-
},
|
|
134
|
-
createdBy: {
|
|
135
|
-
type: mongoose.Schema.Types.ObjectId,
|
|
136
|
-
ref: "User",
|
|
137
|
-
default: null,
|
|
138
|
-
},
|
|
139
|
-
updatedBy: {
|
|
140
|
-
type: mongoose.Schema.Types.ObjectId,
|
|
141
|
-
ref: "User",
|
|
142
|
-
default: null,
|
|
143
|
-
},
|
|
144
|
-
fieldType: {
|
|
145
|
-
type: String,
|
|
146
|
-
enum: [
|
|
147
|
-
"text",
|
|
148
|
-
"autocomplete",
|
|
149
|
-
"radio",
|
|
150
|
-
"text area",
|
|
151
|
-
"number",
|
|
152
|
-
"date",
|
|
153
|
-
"time",
|
|
154
|
-
"email",
|
|
155
|
-
"range",
|
|
156
|
-
"url",
|
|
157
|
-
"colour",
|
|
158
|
-
"file",
|
|
159
|
-
],
|
|
160
|
-
},
|
|
161
|
-
option: {
|
|
162
|
-
type: mongoose.Schema.Types.Mixed,
|
|
163
|
-
},
|
|
164
|
-
},
|
|
165
|
-
],
|
|
166
|
-
},
|
|
167
|
-
],
|
|
168
|
-
},
|
|
169
|
-
{ timestamps: true, toJSON: { virtuals: true }, toObject: { virtuals: true } }
|
|
170
|
-
);
|
|
171
|
-
|
|
172
|
-
const commonOptions = {
|
|
173
|
-
type: String,
|
|
174
|
-
trim: true,
|
|
175
|
-
default: "",
|
|
176
|
-
};
|
|
177
|
-
|
|
178
|
-
workspaceSchema.add({
|
|
179
|
-
contact: commonOptions,
|
|
180
|
-
email: commonOptions,
|
|
181
|
-
address: commonOptions,
|
|
182
|
-
websiteUrl: commonOptions,
|
|
183
|
-
facebookUrl: commonOptions,
|
|
184
|
-
twitterUrl: commonOptions,
|
|
185
|
-
instagramUrl: commonOptions,
|
|
186
|
-
chatGptApiKey: commonOptions,
|
|
187
|
-
});
|
|
188
|
-
|
|
189
|
-
const Workspace = mongoose.model("Workspace", workspaceSchema);
|
|
190
|
-
module.exports = Workspace;
|