Files
soroban-abacus-flashcards/apps/web/src/lib/classroom/index.ts
Thomas Hallock 91aaddbeab feat(worksheet-parsing): add parsing UI and fix parent access control
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>
2026-01-02 14:10:29 -06:00

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'