This document provides comprehensive documentation of the database structure, algorithms, and system architecture discovered during development and testing.
Purpose: Central user management for all system users
Structure:
{
"_id": ObjectId,
"id": String, // Unique user identifier
"first_name": String,
"last_name": String,
"username": String, // Login username
"email": String,
"telephone": String,
"position": String,
"role": String, // "admin", "faculty", "student"
"hashed_password": String,
"subjects": Array, // Subject codes assigned to faculty
"target_hours": Number, // Target teaching hours per week
"faculty": String, // Faculty assignment (e.g., "Faculty of Computing")
"department": String, // Department (e.g., "Computer Science")
"unavailable_dates": Array // Legacy field for old system
}Key Insights:
- Faculty members are stored with
role: "faculty" - Originally missing
facultyanddepartmentfields (fixed during development) - Contains both current and legacy unavailability data
Purpose: New system for managing faculty unavailability requests
Structure:
{
"_id": ObjectId,
"record_id": String, // Unique request identifier
"faculty_id": String, // References Users.id
"faculty_name": String, // Cached faculty name
"department": String, // Faculty department
"date": String, // Date in YYYY-MM-DD format
"reason": String, // Reason for unavailability
"unavailability_type": String, // "sick_leave", "personal_leave", etc.
"status": String, // "pending", "approved", "denied"
"substitute_id": String, // Optional substitute faculty ID
"substitute_name": String, // Cached substitute name
"admin_notes": String, // Admin comments
"created_at": DateTime,
"updated_at": DateTime
}Status Values:
pending- Awaiting admin reviewapproved- Approved by admindenied- Rejected by admin
Unavailability Types:
sick_leave- Medical leavepersonal_leave- Personal time offconference- Conference/training attendanceemergency- Emergency situationsother- Other reasons
Purpose: Separate teacher data (currently empty - data is in Users)
Status: Not actively used - all faculty data is in Users collection
Purpose: Course/subject definitions
Structure:
{
"_id": ObjectId,
"code": String, // Subject code (e.g., "CS101")
"name": String, // Subject name
"credits": Number, // Credit hours
"semester": String, // Target semester
"year": Number, // Academic year
"prerequisites": Array // Prerequisite subject codes
}Purpose: Room and facility management
Structure:
{
"_id": ObjectId,
"name": String, // Room identifier
"long_name": String, // Full room name
"capacity": Number, // Maximum occupancy
"type": String, // "Lecture Hall", "Lab", etc.
"attributes": Object, // Additional properties
"availability": Array // Time slot availability
}Purpose: Academic day definitions
Structure:
{
"_id": ObjectId,
"name": String, // Short name (e.g., "Mon")
"long_name": String, // Full name (e.g., "Monday")
"order": Number // Day ordering
}Purpose: Time period definitions
Structure:
{
"_id": ObjectId,
"name": String, // Period identifier (e.g., "P1")
"long_name": String, // Full description
"start_time": String, // Start time
"end_time": String, // End time
"duration": Number // Duration in hours
}- Stored unavailability in
Users.unavailable_datesarray - Simple date-based storage
- Limited functionality
- Dedicated
faculty_unavailabilitycollection - Rich metadata and workflow support
- Admin approval process
- Substitute assignment capability
The system uses multiple algorithms for timetable optimization:
-
Genetic Algorithm (GA)
- Population-based optimization
- Crossover and mutation operations
- Fitness evaluation based on constraints
-
NSGA-II (Non-dominated Sorting Genetic Algorithm)
- Multi-objective optimization
- Pareto front generation
- Constraint handling
-
Constraint Optimization (CO)
- Hard and soft constraint satisfaction
- Penalty-based scoring
- Backtracking algorithms
{
"semesters": {
"sem1yr1": [
{
"day": { "name": "Mon", "long_name": "Monday" },
"period": [{ "name": "P1", "long_name": "Period 1" }],
"subject": "CS101",
"teacher": "teacher_id",
"room": { "name": "LH1" },
"subgroup": "Group A",
"duration": 1
}
]
}
}GET /api/v1/faculty-availability/unavailability-requests- Get all requestsGET /api/v1/faculty-availability/unavailability-requests/pending- Get pending requestsGET /api/v1/faculty-availability/faculty/{id}/unavailable-dates- Get faculty unavailable datesPOST /api/v1/faculty-availability/unavailability-requests- Create new requestPUT /api/v1/faculty-availability/unavailability-requests/{id}/status- Update request status
GET /api/v1/data/teachers- Get all teachers/facultyGET /api/v1/data/subjects- Get all subjectsGET /api/v1/data/spaces- Get all spaces/roomsGET /api/v1/data/days- Get academic daysGET /api/v1/data/periods- Get time periods
GET /api/v1/timetable/faculty/{id}- Get faculty-specific timetablePOST /api/v1/timetable/generate- Generate new timetableGET /api/v1/timetable/published- Get published timetable
- Missing Faculty Assignments: All faculty users lacked
facultyanddepartmentfields - Dual Systems: Old and new unavailability systems running in parallel
- Data Inconsistency: Frontend calling wrong API endpoints
- Empty Collections:
teacherscollection unused, data inUsersinstead
- API Endpoint Mismatch: Frontend using legacy endpoints
- Data Format Inconsistency: Different date formats across systems
- Authentication Flow: JWT token parsing for user identification
- Database Queries: Efficient indexing on frequently queried fields
- Caching Strategy: Faculty names cached in unavailability records
- Pagination: Large datasets handled with proper pagination
# Simplified structure
class GeneticAlgorithm:
def __init__(self, population_size, mutation_rate, crossover_rate):
self.population_size = population_size
self.mutation_rate = mutation_rate
self.crossover_rate = crossover_rate
def generate_initial_population(self):
# Create random timetable solutions
pass
def evaluate_fitness(self, individual):
# Calculate constraint violations and preferences
pass
def selection(self, population):
# Tournament or roulette wheel selection
pass
def crossover(self, parent1, parent2):
# Combine two solutions
pass
def mutation(self, individual):
# Random modifications
pass-
Hard Constraints (Must be satisfied)
- No teacher in two places at once
- Room capacity limits
- Teacher unavailability
- Subject-teacher assignments
-
Soft Constraints (Preferences)
- Teacher workload balance
- Room preferences
- Time slot preferences
- Consecutive class scheduling
- Faculty submits request via dashboard
- Request stored in
faculty_unavailabilitycollection - Admin reviews via admin dashboard
- Status updated (approved/denied)
- Optional substitute assignment
- Notification to faculty
- Collect constraints from database
- Initialize algorithm parameters
- Generate candidate solutions
- Evaluate fitness against constraints
- Apply genetic operations
- Iterate until convergence
- Select best solution
- Store in database
- Publish to frontend
check_db.py- General database connectivitycheck_users.py- User data validationcheck_faculty_requests.py- Faculty request verificationcheck_teacher_faculty.py- Faculty assignment verification
test_frontend_api.py- Comprehensive API endpoint testingtest_consolidated_system.py- End-to-end system testingtest_faculty_availability.py- Faculty availability system testing
create_test_data.py- Generate test datasetscreate_saman_request.py- Create sample requestsassign_faculty_departments.py- Fix faculty assignments
- JWT token-based authentication
- Role-based access control (admin, faculty, student)
- Password hashing with secure algorithms
- Input validation on all endpoints
- SQL injection prevention (using MongoDB)
- Cross-site scripting (XSS) protection
- Faculty can only modify their own data
- Admin approval required for critical changes
- Audit trail for all modifications
- Indexes on frequently queried fields
- Aggregation pipelines for complex queries
- Connection pooling
- Parallel processing for population evaluation
- Early termination conditions
- Memory-efficient data structures
- Lazy loading for large datasets
- Caching of static data
- Optimistic UI updates
- Add audit trail tables
- Implement soft deletes
- Add data versioning
- Machine learning integration
- Real-time constraint updates
- Multi-campus support
- Mobile application support
- Real-time notifications
- Advanced reporting capabilities
This documentation serves as a comprehensive guide to understanding the system architecture, database structure, and algorithmic approaches used in the Advanced Timetable Scheduling System.