Files
gameno-api/components/pendingStudents/pendingStudentModel.js
T

64 lines
1.7 KiB
JavaScript

'use strict';
const mongoose = require('mongoose');
const uniqueCodePlugin = require('../../utils/mongooseUniqueCodePlugin');
const pendingStudentSchema = new mongoose.Schema({
user: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User',
required: true,
index: true
},
class: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Class',
required: true,
index: true
},
course: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Course',
required: true
},
type: {
type: String,
enum: ['enrollment', 'class_request'],
required: true
},
paymentPlan: {
type: String,
enum: ['full', 'installments', 'deposit'],
required: true
},
tuitionFee: { type: Number, required: true, min: 0 },
classDiscount: { type: Number, default: 0, min: 0 },
paymentDiscount: { type: Number, default: 0, min: 0 },
totalAmount: { type: Number, required: true, min: 0 },
amountDueNow: { type: Number, required: true, min: 0 },
secondInstallmentAmount: { type: Number, default: 0, min: 0 },
secondInstallmentDueDate: { type: Date },
status: {
type: String,
enum: ['pending_payment', 'pending_review', 'approved', 'rejected', 'cancelled'],
default: 'pending_review',
index: true
},
payment: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Payment'
},
paymentReference: { type: String, trim: true },
adminNotes: { type: String, trim: true, maxlength: 2000 },
reviewedBy: { type: mongoose.Schema.Types.ObjectId, ref: 'User' },
reviewedAt: { type: Date }
}, {
timestamps: true
});
pendingStudentSchema.plugin(uniqueCodePlugin);
pendingStudentSchema.index({ user: 1, class: 1, type: 1, status: 1 });
module.exports = mongoose.model('PendingStudent', pendingStudentSchema);