47 lines
1.5 KiB
JavaScript
47 lines
1.5 KiB
JavaScript
const mongoose = require('mongoose');
|
|
|
|
const answerSchema = new mongoose.Schema({
|
|
answeredBy: { type: mongoose.Schema.Types.ObjectId, ref: 'User' },
|
|
answer: String,
|
|
answeredAt: { type: Date, default: Date.now },
|
|
isOfficial: { type: Boolean, default: false },
|
|
});
|
|
|
|
const questionSchema = new mongoose.Schema(
|
|
{
|
|
event: {
|
|
type: mongoose.Schema.Types.ObjectId,
|
|
ref: 'Event',
|
|
required: true,
|
|
},
|
|
session: { type: mongoose.Schema.Types.ObjectId, ref: 'Session' },
|
|
participant: { type: mongoose.Schema.Types.ObjectId, ref: 'Participant' },
|
|
user: { type: mongoose.Schema.Types.ObjectId, ref: 'User' },
|
|
question: { type: String, required: true },
|
|
isAnonymous: { type: Boolean, default: false },
|
|
status: {
|
|
type: String,
|
|
enum: ['pending', 'answered', 'archived'],
|
|
default: 'pending',
|
|
},
|
|
upvotes: { type: Number, default: 0 },
|
|
downvotes: { type: Number, default: 0 },
|
|
/**
|
|
* Audience votes: `key` is browser voterKey (anonymous) or participant ObjectId string (logged-in visitor).
|
|
*/
|
|
audienceVotes: [
|
|
{
|
|
key: { type: String, required: true },
|
|
dir: { type: String, enum: ['up', 'down'], required: true },
|
|
},
|
|
],
|
|
upvotedBy: [{ type: mongoose.Schema.Types.ObjectId, ref: 'User' }],
|
|
answers: [answerSchema],
|
|
},
|
|
{ timestamps: true }
|
|
);
|
|
|
|
questionSchema.index({ event: 1 });
|
|
questionSchema.index({ session: 1 });
|
|
module.exports = mongoose.model('Question', questionSchema);
|