// /components/courses/courseModel.js const mongoose = require('mongoose'); const discountSchema = new mongoose.Schema({ percent: { type: Number, required: true, min: 0, max: 100 }, validFrom: { type: Date, required: true }, validTo: { type: Date, required: true }, isActive: { type: Boolean, default: true } }); const offerSchema = new mongoose.Schema({ title: { type: String, required: true, trim: true }, description: { type: String, trim: true }, type: { type: String, enum: ['fullAdvancePayment', 'earlyBird', 'custom'], required: true }, percent: { type: Number, min: 0, max: 100 }, fixedAmount: { type: Number, min: 0 }, validFrom: { type: Date }, validTo: { type: Date }, isActive: { type: Boolean, default: true } }); const courseSchema = new mongoose.Schema({ title: { type: String, required: true, trim: true, index: true }, description: { type: String, trim: true }, type: { type: String, enum: ['General', 'Private'], required: true }, price: { type: Number, required: true, min: 0 }, rating: { type: Number, default: 0, min: 0, max: 5 }, isOfficial: { type: Boolean, default: false }, /** When true, course appears on the public website */ showOnFrontend: { type: Boolean, default: true, index: true }, /** Number of sessions in the course */ sectionCount: { type: Number, default: 1, min: 1 }, /** Hours per session */ hoursPerSection: { type: Number, default: 1.5, min: 0 }, /** Bullet-point highlights shown on the frontend */ highlights: [{ type: String, trim: true }], professor: { type: mongoose.Schema.Types.ObjectId, ref: 'Professor' }, discounts: [discountSchema], offers: [offerSchema], capacity: { type: Number, default: 30 } }, { timestamps: true }); module.exports = mongoose.model('Course', courseSchema);