courseworx/backend/models/index.js
Mahmoud M. Abdalla b4d90c650f Release v1.1.0 - Course Content & Enrollment Management
New Features:
- Comprehensive course content management system
- Multi-type content support (Documents, Images, Videos, Articles, Quizzes, Certificates)
- File upload system with 100MB limit and type validation
- Quiz system with multiple question types
- Complete enrollment and subscriber management
- Status tracking (pending, active, completed, cancelled)
- Payment management (pending, paid, failed, refunded)
- Progress tracking (0-100%) with automatic updates
- Course capacity limits and validation
- Certificate issuance tracking
- Enrollment analytics and statistics

Technical Improvements:
- Enhanced file upload system with type validation
- New database models: CourseContent, QuizQuestion
- Comprehensive API endpoints for content and enrollment management
- Role-based access control for all new features
- Enhanced error handling and validation
- File management with automatic cleanup

This version provides a complete foundation for creating rich educational content and managing student enrollments.
2025-07-27 23:59:01 +03:00

49 lines
No EOL
1.9 KiB
JavaScript

const User = require('./User');
const Course = require('./Course');
const Enrollment = require('./Enrollment');
const Attendance = require('./Attendance');
const Assignment = require('./Assignment');
const CourseContent = require('./CourseContent');
const QuizQuestion = require('./QuizQuestion');
// User associations
User.hasMany(Course, { as: 'createdCourses', foreignKey: 'trainerId' });
User.hasMany(Enrollment, { as: 'enrollments', foreignKey: 'userId' });
User.hasMany(Attendance, { as: 'attendance', foreignKey: 'userId' });
User.hasMany(Assignment, { as: 'createdAssignments', foreignKey: 'trainerId' });
// Course associations
Course.belongsTo(User, { as: 'trainer', foreignKey: 'trainerId' });
Course.hasMany(Enrollment, { as: 'enrollments', foreignKey: 'courseId' });
Course.hasMany(Attendance, { as: 'attendance', foreignKey: 'courseId' });
Course.hasMany(Assignment, { as: 'assignments', foreignKey: 'courseId' });
// Enrollment associations
Enrollment.belongsTo(User, { as: 'user', foreignKey: 'userId' });
Enrollment.belongsTo(Course, { as: 'course', foreignKey: 'courseId' });
// Attendance associations
Attendance.belongsTo(User, { as: 'user', foreignKey: 'userId' });
Attendance.belongsTo(Course, { as: 'course', foreignKey: 'courseId' });
// Assignment associations
Assignment.belongsTo(User, { as: 'trainer', foreignKey: 'trainerId' });
Assignment.belongsTo(Course, { as: 'course', foreignKey: 'courseId' });
// Course Content associations
Course.hasMany(CourseContent, { as: 'contents', foreignKey: 'courseId' });
CourseContent.belongsTo(Course, { as: 'course', foreignKey: 'courseId' });
// Quiz Question associations
CourseContent.hasMany(QuizQuestion, { as: 'questions', foreignKey: 'contentId' });
QuizQuestion.belongsTo(CourseContent, { as: 'content', foreignKey: 'contentId' });
module.exports = {
User,
Course,
Enrollment,
Attendance,
Assignment,
CourseContent,
QuizQuestion
};