Worksheet Parsing UI (Slices 1-2): - Add parse button to OfflineWorkSection thumbnails and PhotoViewerEditor - Create ParsedProblemsList component to display extracted problems - Add useWorksheetParsing hook with mutations for parse/review/approve - Add attachmentKeys to queryKeys for cache management - Wire up parsing workflow in SummaryClient Fix parent upload access: - Change /api/players/[id]/access to use getDbUserId() instead of getViewerId() - Guest users' guestId was not matching parent_child.parent_user_id - Parents can now see upload/camera buttons in offline work section Fix curriculum type errors: - Add missing 'advanced' property to createFullSkillSet() - Fix enabledRequiredSkills -> enabledAllowedSkills in problem-generator - Remove incorrect Partial<> wrapper from type casts 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
100 lines
2.2 KiB
TypeScript
100 lines
2.2 KiB
TypeScript
/**
|
|
* Classroom Module
|
|
*
|
|
* Central module for the classroom/teacher/parent system.
|
|
*
|
|
* This module provides:
|
|
* - Access control (who can see/control what)
|
|
* - Family management (parent-child relationships)
|
|
* - Enrollment management (consent workflow)
|
|
* - Presence management (live classroom state)
|
|
* - Classroom CRUD operations
|
|
*/
|
|
|
|
// Access Control
|
|
export {
|
|
type AccessLevel,
|
|
type PlayerAccess,
|
|
type PlayerAction,
|
|
type AccessiblePlayers,
|
|
type RemediationType,
|
|
type AuthorizationError,
|
|
getPlayerAccess,
|
|
canPerformAction,
|
|
getAccessiblePlayers,
|
|
isParentOf,
|
|
isTeacherOf,
|
|
generateAuthorizationError,
|
|
} from './access-control'
|
|
|
|
// Family Management
|
|
export {
|
|
type LinkResult,
|
|
linkParentToChild,
|
|
getLinkedParents,
|
|
getLinkedParentIds,
|
|
getLinkedChildren,
|
|
unlinkParentFromChild,
|
|
getOrCreateFamilyCode,
|
|
regenerateFamilyCode,
|
|
isParent,
|
|
generateFamilyCode,
|
|
} from './family-manager'
|
|
|
|
// Enrollment Management
|
|
export {
|
|
type CreateEnrollmentRequestParams,
|
|
type ApprovalResult,
|
|
type EnrollmentRequestWithRelations,
|
|
createEnrollmentRequest,
|
|
approveEnrollmentRequest,
|
|
denyEnrollmentRequest,
|
|
cancelEnrollmentRequest,
|
|
getPendingRequestsForClassroom,
|
|
getRequestsAwaitingParentApproval,
|
|
getPendingRequestsForParent,
|
|
isEnrolled,
|
|
getEnrolledStudents,
|
|
unenrollStudent,
|
|
getEnrolledClassrooms,
|
|
directEnrollStudent,
|
|
getRequiredApprovals,
|
|
isFullyApproved,
|
|
isDenied,
|
|
} from './enrollment-manager'
|
|
|
|
// Presence Management
|
|
export {
|
|
type EnterClassroomParams,
|
|
type EnterClassroomResult,
|
|
type PresenceWithClassroom,
|
|
type PresenceWithPlayer,
|
|
enterClassroom,
|
|
leaveClassroom,
|
|
leaveSpecificClassroom,
|
|
clearClassroomPresence,
|
|
getStudentPresence,
|
|
isStudentPresent,
|
|
isStudentPresentIn,
|
|
getClassroomPresence,
|
|
getPresenceCount,
|
|
getPresentPlayerIds,
|
|
} from './presence-manager'
|
|
|
|
// Classroom Management
|
|
export {
|
|
type CreateClassroomParams,
|
|
type CreateClassroomResult,
|
|
type ClassroomWithTeacher,
|
|
type UpdateClassroomParams,
|
|
createClassroom,
|
|
getClassroom,
|
|
getTeacherClassroom,
|
|
isTeacher,
|
|
getClassroomByCode,
|
|
updateClassroom,
|
|
regenerateClassroomCode,
|
|
deleteClassroom,
|
|
generateClassroomCode,
|
|
} from './classroom-manager'
|