Summary
Enhance the bulk course provisioning flow by replacing free-text inputs and CSV upload with cascading dropdown selectors (Semester → Department → Program) and an inline editable table for course data entry.
Problem
The current bulk course provisioning flow only drills down to Campus + Department with free-text inputs and requires CSV file upload. This doesn't match the actual Moodle category hierarchy and forces users to manually type values and date ranges that could be derived from existing data.
Solution
API Changes
- New
GET /admin/filters/semesters endpoint returning semesters with computed date ranges from semester code
- Updated
GET /admin/filters/departments to accept optional semesterId query parameter
- New
POST /moodle/provision/courses/bulk/preview endpoint (JSON body, replaces CSV)
- New
POST /moodle/provision/courses/bulk/execute endpoint with audit trail
- Server-side hierarchy validation (semester → department → program relationship integrity)
- Backend duplicate course code validation within batch
Admin Frontend Changes
- Cascading dropdown selectors: Semester → Department → Program
- Auto-fill start/end dates from semester selection (editable)
- Inline editable table for course data entry (replaces CSV upload)
- Client-side duplicate course code validation
- Preview → Execute two-step pattern preserved
Acceptance Criteria
Summary
Enhance the bulk course provisioning flow by replacing free-text inputs and CSV upload with cascading dropdown selectors (Semester → Department → Program) and an inline editable table for course data entry.
Problem
The current bulk course provisioning flow only drills down to Campus + Department with free-text inputs and requires CSV file upload. This doesn't match the actual Moodle category hierarchy and forces users to manually type values and date ranges that could be derived from existing data.
Solution
API Changes
GET /admin/filters/semestersendpoint returning semesters with computed date ranges from semester codeGET /admin/filters/departmentsto accept optionalsemesterIdquery parameterPOST /moodle/provision/courses/bulk/previewendpoint (JSON body, replaces CSV)POST /moodle/provision/courses/bulk/executeendpoint with audit trailAdmin Frontend Changes
Acceptance Criteria