feat: add pending student registration flow and pricing APIs.
Support public class lookup, user provisioning, installment pricing, and admin approval before final enrollment.
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
'use strict';
|
||||
|
||||
const mongoose = require('mongoose');
|
||||
|
||||
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.index({ user: 1, class: 1, type: 1, status: 1 });
|
||||
|
||||
module.exports = mongoose.model('PendingStudent', pendingStudentSchema);
|
||||
Reference in New Issue
Block a user