Spaces:
Paused
Paused
File size: 2,075 Bytes
c904036 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 | const mongoose = require('mongoose');
const supportTicketSchema = new mongoose.Schema({
userId: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User',
required: true,
},
ticketId: {
type: String,
unique: true,
required: true,
},
topic: {
type: String,
required: true,
enum: ['general', 'technical', 'billing', 'events', 'account', 'other'],
},
subject: {
type: String,
required: true,
trim: true,
maxlength: 200,
},
message: {
type: String,
required: true,
trim: true,
maxlength: 2000,
},
name: {
type: String,
required: true,
trim: true,
maxlength: 100,
},
email: {
type: String,
required: true,
trim: true,
},
attachment: {
filename: String,
url: String,
mimetype: String,
size: Number,
},
priority: {
type: String,
enum: ['low', 'medium', 'high', 'urgent'],
default: 'medium',
},
status: {
type: String,
enum: ['open', 'in_progress', 'waiting_for_user', 'resolved', 'closed'],
default: 'open',
},
assignedTo: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User',
},
adminNotes: [
{
note: String,
addedBy: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User',
},
addedAt: {
type: Date,
default: Date.now,
},
},
],
createdAt: {
type: Date,
default: Date.now,
},
updatedAt: {
type: Date,
default: Date.now,
},
resolvedAt: Date,
closedAt: Date,
});
// Generate unique ticket ID
supportTicketSchema.pre('save', function (next) {
if (this.isNew) {
const timestamp = Date.now().toString().slice(-8);
const random = Math.random().toString(36).substr(2, 4).toUpperCase();
this.ticketId = `TKT-${timestamp}-${random}`;
}
this.updatedAt = new Date();
next();
});
// Index for efficient queries
supportTicketSchema.index({ userId: 1, status: 1 });
supportTicketSchema.index({ status: 1, priority: 1 });
module.exports = mongoose.model('SupportTicket', supportTicketSchema);
|