Skip to main content

Phase 3: Classes

Phase 3 delivers class management -- creating classes, enrolling students, assigning teachers, and managing class subjects and materials.

Purpose

Classes bring together students, teachers, and subjects for a given academic year. This phase wires up the ClassTeacher and ClassSubject queries in auth.ts to populate SA3Session.classIds.

Key Models

ModelPurpose
ClassCore class entity (name, yearGroup, academicYear, optional class teacher)
ClassStudentStudent enrollment in a class (composite PK)
ClassTeacherTeacher assignment to a class (composite PK)
ClassSubjectLinks class + subject + optional teacher for subject-level scope
ClassMaterialS3-backed file attached to a class

Permission Pattern

  • Read operations: Any role that covers the class (permission is not null).
  • Write operations: Require ADMIN or PRINCIPAL (PERMISSION_ORDER >= 90).

All routes use resolvePermissionsForResource with { resourceType: 'Class', classId }.

API Endpoints

MethodPathPurpose
GET/POST/api/admin/classesList / create classes
GET/PATCH/DELETE/api/admin/classes/[id]Class CRUD (soft delete: isArchived = true)
GET/POST/api/admin/classes/[id]/studentsList / enrol students
DELETE/api/admin/classes/[id]/students/[studentId]Unenrol student
GET/POST/api/admin/classes/[id]/teachersList / assign teachers
DELETE/api/admin/classes/[id]/teachers/[staffId]Remove teacher
GET/POST/api/admin/classes/[id]/subjectsList / add subjects
PATCH/DELETE/api/admin/classes/[id]/subjects/[csId]Update / remove subject
GET/POST/api/admin/classes/[id]/materialsList / upload materials
DELETE/api/admin/classes/[id]/materials/[materialId]Remove material
GET/api/admin/classes/[id]/materials/[materialId]/download-urlPresigned download

Key Files

  • src/app/admin/classes/ -- Class management UI with tabs for students, teachers, subjects, materials
  • src/lib/auth.ts -- Updated with real ClassTeacher/ClassSubject queries