File size: 1,208 Bytes
e557560
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
const mongoose = require('mongoose');

// Define a simple sub-schema for replies
const ReplySchema = new mongoose.Schema({
  userId: { type: mongoose.Schema.Types.ObjectId, ref: 'User', default: null },
  guestName: { type: String, default: 'Anonymous' },
  content: { type: String, required: true, maxLength: 500 },
  createdAt: { type: Date, default: Date.now }
});

const ReviewSchema = new mongoose.Schema({
  mediaId: { type: mongoose.Schema.Types.ObjectId, ref: 'Media', required: true, index: true },
  userId: { type: mongoose.Schema.Types.ObjectId, ref: 'User', default: null },
  guestName: { type: String, default: 'Anonymous Brutalist' },
  
  rating: { type: Number, required: true, min: 1, max: 10 },
  content: { type: String, required: true, maxLength: 2000 },
  
  isSpoiler: { type: Boolean, default: false },
  
  // Array of embedded replies
  replies: [ReplySchema], 
  
  upvotes: [{ type: mongoose.Schema.Types.ObjectId, ref: 'User' }],
  downvotes: [{ type: mongoose.Schema.Types.ObjectId, ref: 'User' }],
  weight: { type: Number, default: 1.0 } 
}, { timestamps: true });

ReviewSchema.index({ mediaId: 1, createdAt: -1 });

module.exports = mongoose.model('Review', ReviewSchema);