Sindbad~EG File Manager
import mongoose from "mongoose";
const phoneNumberSchema = new mongoose.Schema({
phone_no: { type: String, required: true },
type: {
type: String,
// enum: ["Home", "Work", "Mobile", "Other"],
required: false,
default: "",
},
is_primary: { type: Boolean, default: false },
});
const emailSchema = new mongoose.Schema({
email_address: { type: String, required: true },
type: {
type: String,
// enum: ["Home", "Work", "Mobile", "Other"],
required: false,
default: "",
},
is_primary: { type: Boolean, default: false },
});
const BasicContactInfo = new mongoose.Schema(
{
user_id: {
type: mongoose.Schema.ObjectId,
ref: "User",
},
contact_id: {
type: mongoose.Schema.ObjectId,
ref: "Contact",
},
contact_preference: {
type: String,
default: "Phone",
enum: ["Phone", "Mail", "Email", "Text"],
},
phone_numbers: {
type: [phoneNumberSchema],
validate: [
{
validator: function (v) {
return v.length <= 4;
},
message: (props) => `An agent can have up to 4 phone numbers!`,
},
{
validator: function (v) {
const primaryCount = v.filter((phone) => phone.is_primary).length;
return primaryCount <= 1;
},
message: (props) => `Only one phone number can be marked as primary!`,
},
],
},
emails: {
type: [emailSchema],
validate: [
{
validator: function (v) {
return v.length <= 4;
},
message: (props) => `An agent can have up to 2 emails!`,
},
{
validator: function (v) {
const primaryCount = v.filter((email) => email.is_primary).length;
return primaryCount <= 1;
},
message: (props) => `Only one email can be marked as primary!`,
},
],
},
createdOn: { type: Date, default: Date.now },
modifiedOn: { type: Date, default: Date.now },
},
{
toJSON: { virtuals: true },
toObject: { virtuals: true },
}
);
export default mongoose.model("BasicContactInfo", BasicContactInfo);
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists