Course Management System (Take-Home Machine Coding)
Requirements: Build a take-home machine-coding assignment implementing a Course Management system. Typical scope: model Course, Student, Instructor, and Enrollment entities; support creating/updating courses, enrolling and unenrolling students (with a capacity limit), listing a student's enrolled courses, and listing a course's roster.
Design: Favor a clean OOP design - separate repository/service/controller layers even in a take-home exercise, use interfaces for the persistence layer so storage (in-memory map vs DB) can be swapped, and validate business rules (e.g., can't enroll past capacity, can't double-enroll) inside the service layer rather than the controller. Include basic tests for the enroll/unenroll and capacity-limit logic. Since this is take-home, code quality, structure, and test coverage are graded as heavily as functional correctness.