Initial commit: teaching institution management API.

Express/MongoDB backend with JWT auth, RBAC, S3 uploads, notifications, and scheduled jobs.
This commit is contained in:
2026-08-09 04:18:08 +02:00
commit f04c797be6
107 changed files with 9190 additions and 0 deletions
+89
View File
@@ -0,0 +1,89 @@
// /components/sessions/sessionModel.js
const mongoose = require('mongoose');
const attendanceRecordSchema = new mongoose.Schema({
user: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User',
required: true
},
status: {
type: String,
enum: ['present', 'absent', 'late', 'excused'],
default: 'present'
},
note: {
type: String,
trim: true
},
recordedBy: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User'
}
}, {
_id: false
});
const sessionSchema = new mongoose.Schema({
course: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Course',
required: true,
index: true
},
class: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Class',
required: true,
index: true
},
professor: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Professor',
required: true,
index: true
},
day: {
type: Date,
required: true,
index: true
},
startTime: {
type: String,
required: true,
trim: true
},
endTime: {
type: String,
required: true,
trim: true
},
place: {
type: String,
trim: true
},
topic: {
type: String,
trim: true
},
note: {
type: String,
trim: true,
maxlength: 5000
},
status: {
type: String,
enum: ['scheduled', 'held', 'cancelled'],
default: 'scheduled'
},
attendanceList: [attendanceRecordSchema],
reminderSentAt: {
type: Date,
default: null
}
}, {
timestamps: true
});
module.exports = mongoose.model('Session', sessionSchema);