const mongoose = require("mongoose"); const STATUSES = ["subscribed", "unsubscribed"]; const emailPattern = /^\S+@\S+\.\S+$/; const newsletterSubscriptionSchema = new mongoose.Schema( { email: { type: String, required: [true, "Email is required"], trim: true, lowercase: true, validate: { validator(value) { return emailPattern.test(value); }, message: "Please enter a valid email", }, }, status: { type: String, enum: STATUSES, default: "subscribed", }, pageUrl: { type: String, trim: true, default: "", }, ipAddress: { type: String, default: "", }, userAgent: { type: String, default: "", }, internalNote: { type: String, trim: true, default: "", maxlength: [2000, "Internal note cannot exceed 2000 characters"], }, }, { collection: "newsletter_subscriptions", timestamps: true, autoCreate: false, autoIndex: false, }, ); newsletterSubscriptionSchema.statics.STATUSES = STATUSES; module.exports = mongoose.model( "NewsletterSubscription", newsletterSubscriptionSchema, );