72 lines
2.6 KiB
JavaScript
72 lines
2.6 KiB
JavaScript
var mongoose = require('mongoose');
|
|
|
|
// ===== Broccolini Bot Models =====
|
|
|
|
const ticketSchema = new mongoose.Schema({
|
|
gmailThreadId: { type: String, required: true, unique: true, index: true },
|
|
discordThreadId: String,
|
|
broccoliniTicketId: Number,
|
|
lastSyncedBroccoliniArticleId: Number,
|
|
senderEmail: { type: String, required: true },
|
|
subject: String,
|
|
createdAt: { type: Date, default: Date.now },
|
|
status: { type: String, default: 'open', enum: ['open', 'closed'] },
|
|
transcriptMessageId: String,
|
|
claimedBy: String,
|
|
escalated: { type: Boolean, default: false },
|
|
escalationTier: { type: Number, default: 0 },
|
|
ticketNumber: Number,
|
|
renameCount: { type: Number, default: 0 },
|
|
renameWindowStart: Date,
|
|
priority: { type: String, default: 'normal', enum: ['low', 'normal', 'medium', 'high'] },
|
|
ticketTag: String,
|
|
lastActivity: Date,
|
|
reminderSent: { type: Boolean, default: false },
|
|
welcomeMessageId: String,
|
|
claimerId: String,
|
|
staffChannelId: String,
|
|
parentCategoryId: String,
|
|
unclaimedRemindersSent: { type: [Number], default: [] },
|
|
lastMessageAuthorIsStaff: { type: Boolean, default: false },
|
|
pendingDelete: { type: Boolean, default: false }
|
|
});
|
|
ticketSchema.index({ status: 1, lastActivity: 1 });
|
|
ticketSchema.index({ senderEmail: 1, status: 1 });
|
|
ticketSchema.index({ discordThreadId: 1 });
|
|
mongoose.model('Ticket', ticketSchema);
|
|
|
|
mongoose.model('TicketCounter', new mongoose.Schema({
|
|
senderLocal: { type: String, required: true, unique: true },
|
|
counter: { type: Number, default: 1 }
|
|
}));
|
|
|
|
mongoose.model('Transcript', new mongoose.Schema({
|
|
gmailThreadId: { type: String, required: true },
|
|
transcriptMessageId: String,
|
|
createdAt: { type: Date, default: Date.now }
|
|
}));
|
|
|
|
mongoose.model('Tag', new mongoose.Schema({
|
|
name: { type: String, required: true, unique: true },
|
|
content: { type: String, required: true },
|
|
createdAt: { type: Date, default: Date.now },
|
|
createdBy: String,
|
|
useCount: { type: Number, default: 0 }
|
|
}));
|
|
|
|
mongoose.model('StaffSettings', new mongoose.Schema({
|
|
userId: { type: String, required: true, unique: true },
|
|
guildId: { type: String, required: true },
|
|
notifyDm: { type: Boolean, default: false },
|
|
updatedAt: { type: Date, default: Date.now }
|
|
}));
|
|
|
|
mongoose.model('StaffSignature', new mongoose.Schema({
|
|
userId: { type: String, required: true, unique: true },
|
|
guildId: { type: String, required: true },
|
|
valediction: { type: String, default: '' },
|
|
displayName: { type: String, default: '' },
|
|
tagline: { type: String, default: '' },
|
|
updatedAt: { type: Date, default: Date.now }
|
|
}));
|