Update document and email message schemas to allow optional object references and introduce a new email recipient schema. Adjust required fields and enhance indexing for better data management.
All checks were successful
farmcontrol/farmcontrol-scheduler/pipeline/head This commit looks good
All checks were successful
farmcontrol/farmcontrol-scheduler/pipeline/head This commit looks good
This commit is contained in:
parent
21517ca5c6
commit
e0e7951ff2
@ -14,8 +14,15 @@ const documentJobSchema = new Schema(
|
||||
object: {
|
||||
type: Schema.Types.ObjectId,
|
||||
refPath: 'objectType',
|
||||
required: true,
|
||||
required: false,
|
||||
},
|
||||
objects: [
|
||||
{
|
||||
type: Schema.Types.ObjectId,
|
||||
refPath: 'objectType',
|
||||
required: false,
|
||||
},
|
||||
],
|
||||
state: {
|
||||
type: { type: String, required: true, default: 'queued' },
|
||||
progress: { type: Number, required: false },
|
||||
|
||||
@ -3,6 +3,32 @@ import { generateId } from '../../utils.js';
|
||||
|
||||
const { Schema } = mongoose;
|
||||
|
||||
const emailRecipientSchema = new Schema(
|
||||
{
|
||||
recipientEmail: { type: String, required: true },
|
||||
recipientType: { type: String, enum: ['client', 'vendor'], required: false },
|
||||
recipient: {
|
||||
type: Schema.Types.ObjectId,
|
||||
refPath: 'recipients.recipientType',
|
||||
required: false,
|
||||
},
|
||||
objectType: { type: String, required: false },
|
||||
object: {
|
||||
type: Schema.Types.ObjectId,
|
||||
refPath: 'recipients.objectType',
|
||||
required: false,
|
||||
},
|
||||
pixelId: { type: String, required: true },
|
||||
messageId: { type: String, required: false },
|
||||
attachments: [{ type: Schema.Types.ObjectId, ref: 'file', required: false }],
|
||||
read: { type: Boolean, required: true, default: false },
|
||||
sent: { type: Boolean, required: true, default: false },
|
||||
sentAt: { type: Date, required: false },
|
||||
readAt: { type: Date, required: false },
|
||||
},
|
||||
{ _id: true }
|
||||
);
|
||||
|
||||
const emailMessageSchema = new Schema(
|
||||
{
|
||||
_reference: { type: String, default: () => generateId()() },
|
||||
@ -13,42 +39,36 @@ const emailMessageSchema = new Schema(
|
||||
required: true,
|
||||
},
|
||||
objectType: { type: String, required: true },
|
||||
object: { type: Schema.Types.ObjectId, refPath: 'objectType', required: true },
|
||||
object: { type: Schema.Types.ObjectId, refPath: 'objectType', required: false },
|
||||
objects: [{ type: Schema.Types.ObjectId, refPath: 'objectType', required: false }],
|
||||
emailAccount: {
|
||||
type: Schema.Types.ObjectId,
|
||||
ref: 'emailAccount',
|
||||
required: true,
|
||||
},
|
||||
recipientEmail: { type: String, required: true },
|
||||
recipientType: { type: String, enum: ['client', 'vendor'], required: false },
|
||||
recipient: {
|
||||
type: Schema.Types.ObjectId,
|
||||
refPath: 'recipientType',
|
||||
required: false,
|
||||
},
|
||||
recipients: { type: [emailRecipientSchema], required: true, default: [] },
|
||||
fromEmail: { type: String, required: true, immutable: true },
|
||||
messageId: { type: String, required: false },
|
||||
subject: { type: String, required: false, default: '' },
|
||||
content: { type: String, required: false, default: '' },
|
||||
attachments: [{ type: Schema.Types.ObjectId, ref: 'file', required: false }],
|
||||
state: {
|
||||
type: { type: String, required: true, default: 'queued' },
|
||||
progress: { type: Number, required: false, default: 0 },
|
||||
message: { type: String, required: false },
|
||||
},
|
||||
read: { type: Boolean, required: true, default: false },
|
||||
sentAt: { type: Date, required: false },
|
||||
readAt: { type: Date, required: false },
|
||||
firstReadAt: { type: Date, required: false },
|
||||
lastReadAt: { type: Date, required: false },
|
||||
},
|
||||
{ timestamps: true, suppressReservedKeysWarning: true }
|
||||
);
|
||||
|
||||
emailMessageSchema.index({
|
||||
name: 'text',
|
||||
recipientEmail: 'text',
|
||||
fromEmail: 'text',
|
||||
objectType: 'text',
|
||||
'recipients.recipientEmail': 'text',
|
||||
});
|
||||
emailMessageSchema.index({ 'recipients.pixelId': 1 }, { unique: true, sparse: true });
|
||||
emailMessageSchema.virtual('id').get(function () {
|
||||
return this._id;
|
||||
});
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user