Initial commit: teaching institution management API.
Express/MongoDB backend with JWT auth, RBAC, S3 uploads, notifications, and scheduled jobs.
This commit is contained in:
@@ -0,0 +1,95 @@
|
||||
// /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);
|
||||
Reference in New Issue
Block a user