Files
cms.techvanguard.vn/models/newsletterSubscription.js
T
Tống Thành Đạt f6f2e0e03b feat(admin): implement unified submission and newsletter management
Introduce a centralized system to manage all website form submissions and newsletter subscriptions.
- Add `Submission` and `NewsletterSubscription` models with MongoDB schema validation
- Implement `submissionController` and `newsletterSubscriptionController` for CRUD operations and filtering
- Create a unified admin UI for reviewing submissions across different sources (home, request, contact, partnership, newsletter)
- Add database migration scripts for creating collections and indexes
- Refactor partnership inquiry forms to use a fixed field structure
- Update admin navigation and server CORS settings to support PATCH requests
2026-04-24 17:11:23 +07:00

59 lines
1.2 KiB
JavaScript

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,
);