Files
gameno-api/components/pendingStudents/pendingStudentModel.js
T
kavehhn cd98adff84 feat: add pending student registration flow and pricing APIs.
Support public class lookup, user provisioning, installment pricing, and admin approval before final enrollment.
2026-08-16 08:42:25 +03:30

61 lines
1.6 KiB
JavaScript

'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);