@hed-hog/lms 0.0.303 → 0.0.305
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +413 -401
- package/dist/certificate/certificate.controller.d.ts +90 -0
- package/dist/certificate/certificate.controller.d.ts.map +1 -0
- package/dist/certificate/certificate.controller.js +121 -0
- package/dist/certificate/certificate.controller.js.map +1 -0
- package/dist/certificate/certificate.module.d.ts +3 -0
- package/dist/certificate/certificate.module.d.ts.map +1 -0
- package/dist/certificate/certificate.module.js +26 -0
- package/dist/certificate/certificate.module.js.map +1 -0
- package/dist/certificate/certificate.service.d.ts +115 -0
- package/dist/certificate/certificate.service.d.ts.map +1 -0
- package/dist/certificate/certificate.service.js +343 -0
- package/dist/certificate/certificate.service.js.map +1 -0
- package/dist/certificate/dto/create-certificate-template.dto.d.ts +8 -0
- package/dist/certificate/dto/create-certificate-template.dto.d.ts.map +1 -0
- package/dist/certificate/dto/create-certificate-template.dto.js +44 -0
- package/dist/certificate/dto/create-certificate-template.dto.js.map +1 -0
- package/dist/certificate/dto/update-certificate-template.dto.d.ts +6 -0
- package/dist/certificate/dto/update-certificate-template.dto.d.ts.map +1 -0
- package/dist/certificate/dto/update-certificate-template.dto.js +9 -0
- package/dist/certificate/dto/update-certificate-template.dto.js.map +1 -0
- package/dist/class-group/class-group.controller.d.ts +305 -0
- package/dist/class-group/class-group.controller.d.ts.map +1 -0
- package/dist/class-group/class-group.controller.js +257 -0
- package/dist/class-group/class-group.controller.js.map +1 -0
- package/dist/class-group/class-group.module.d.ts +3 -0
- package/dist/class-group/class-group.module.d.ts.map +1 -0
- package/dist/class-group/class-group.module.js +25 -0
- package/dist/class-group/class-group.module.js.map +1 -0
- package/dist/class-group/class-group.service.d.ts +354 -0
- package/dist/class-group/class-group.service.d.ts.map +1 -0
- package/dist/class-group/class-group.service.js +1356 -0
- package/dist/class-group/class-group.service.js.map +1 -0
- package/dist/class-group/dto/create-class-group.dto.d.ts +33 -0
- package/dist/class-group/dto/create-class-group.dto.d.ts.map +1 -0
- package/dist/class-group/dto/create-class-group.dto.js +165 -0
- package/dist/class-group/dto/create-class-group.dto.js.map +1 -0
- package/dist/class-group/dto/create-session.dto.d.ts +22 -0
- package/dist/class-group/dto/create-session.dto.d.ts.map +1 -0
- package/dist/class-group/dto/create-session.dto.js +117 -0
- package/dist/class-group/dto/create-session.dto.js.map +1 -0
- package/dist/class-group/dto/enrollment.dto.d.ts +22 -0
- package/dist/class-group/dto/enrollment.dto.d.ts.map +1 -0
- package/dist/class-group/dto/enrollment.dto.js +89 -0
- package/dist/class-group/dto/enrollment.dto.js.map +1 -0
- package/dist/class-group/dto/update-class-group.dto.d.ts +6 -0
- package/dist/class-group/dto/update-class-group.dto.d.ts.map +1 -0
- package/dist/class-group/dto/update-class-group.dto.js +9 -0
- package/dist/class-group/dto/update-class-group.dto.js.map +1 -0
- package/dist/class-group/dto/update-session.dto.d.ts +7 -0
- package/dist/class-group/dto/update-session.dto.d.ts.map +1 -0
- package/dist/class-group/dto/update-session.dto.js +24 -0
- package/dist/class-group/dto/update-session.dto.js.map +1 -0
- package/dist/course/course-structure.controller.d.ts +127 -0
- package/dist/course/course-structure.controller.d.ts.map +1 -0
- package/dist/course/course-structure.controller.js +115 -0
- package/dist/course/course-structure.controller.js.map +1 -0
- package/dist/course/course-structure.service.d.ts +142 -0
- package/dist/course/course-structure.service.d.ts.map +1 -0
- package/dist/course/course-structure.service.js +445 -0
- package/dist/course/course-structure.service.js.map +1 -0
- package/dist/course/course.controller.d.ts +195 -0
- package/dist/course/course.controller.d.ts.map +1 -0
- package/dist/course/course.controller.js +104 -0
- package/dist/course/course.controller.js.map +1 -0
- package/dist/course/course.module.d.ts +3 -0
- package/dist/course/course.module.d.ts.map +1 -0
- package/dist/course/course.module.js +28 -0
- package/dist/course/course.module.js.map +1 -0
- package/dist/course/course.service.d.ts +215 -0
- package/dist/course/course.service.d.ts.map +1 -0
- package/dist/course/course.service.js +743 -0
- package/dist/course/course.service.js.map +1 -0
- package/dist/course/dto/create-course-structure-lesson.dto.d.ts +24 -0
- package/dist/course/dto/create-course-structure-lesson.dto.d.ts.map +1 -0
- package/dist/course/dto/create-course-structure-lesson.dto.js +118 -0
- package/dist/course/dto/create-course-structure-lesson.dto.js.map +1 -0
- package/dist/course/dto/create-course-structure-session.dto.d.ts +7 -0
- package/dist/course/dto/create-course-structure-session.dto.d.ts.map +1 -0
- package/dist/course/dto/create-course-structure-session.dto.js +40 -0
- package/dist/course/dto/create-course-structure-session.dto.js.map +1 -0
- package/dist/course/dto/create-course.dto.d.ts +26 -0
- package/dist/course/dto/create-course.dto.d.ts.map +1 -0
- package/dist/course/dto/create-course.dto.js +138 -0
- package/dist/course/dto/create-course.dto.js.map +1 -0
- package/dist/course/dto/update-course-structure-lesson.dto.d.ts +6 -0
- package/dist/course/dto/update-course-structure-lesson.dto.d.ts.map +1 -0
- package/dist/course/dto/update-course-structure-lesson.dto.js +9 -0
- package/dist/course/dto/update-course-structure-lesson.dto.js.map +1 -0
- package/dist/course/dto/update-course-structure-session.dto.d.ts +6 -0
- package/dist/course/dto/update-course-structure-session.dto.d.ts.map +1 -0
- package/dist/course/dto/update-course-structure-session.dto.js +9 -0
- package/dist/course/dto/update-course-structure-session.dto.js.map +1 -0
- package/dist/course/dto/update-course.dto.d.ts +6 -0
- package/dist/course/dto/update-course.dto.d.ts.map +1 -0
- package/dist/course/dto/update-course.dto.js +9 -0
- package/dist/course/dto/update-course.dto.js.map +1 -0
- package/dist/dashboard/dashboard.controller.d.ts +101 -0
- package/dist/dashboard/dashboard.controller.d.ts.map +1 -0
- package/dist/dashboard/dashboard.controller.js +40 -0
- package/dist/dashboard/dashboard.controller.js.map +1 -0
- package/dist/dashboard/dashboard.module.d.ts +3 -0
- package/dist/dashboard/dashboard.module.d.ts.map +1 -0
- package/dist/dashboard/dashboard.module.js +25 -0
- package/dist/dashboard/dashboard.module.js.map +1 -0
- package/dist/dashboard/dashboard.service.d.ts +130 -0
- package/dist/dashboard/dashboard.service.d.ts.map +1 -0
- package/dist/dashboard/dashboard.service.js +626 -0
- package/dist/dashboard/dashboard.service.js.map +1 -0
- package/dist/enterprise/dto/add-enterprise-class-group.dto.d.ts +4 -0
- package/dist/enterprise/dto/add-enterprise-class-group.dto.d.ts.map +1 -0
- package/dist/enterprise/dto/add-enterprise-class-group.dto.js +22 -0
- package/dist/enterprise/dto/add-enterprise-class-group.dto.js.map +1 -0
- package/dist/enterprise/dto/add-enterprise-course.dto.d.ts +5 -0
- package/dist/enterprise/dto/add-enterprise-course.dto.d.ts.map +1 -0
- package/dist/enterprise/dto/add-enterprise-course.dto.js +27 -0
- package/dist/enterprise/dto/add-enterprise-course.dto.js.map +1 -0
- package/dist/enterprise/dto/add-enterprise-lead.dto.d.ts +4 -0
- package/dist/enterprise/dto/add-enterprise-lead.dto.d.ts.map +1 -0
- package/dist/enterprise/dto/add-enterprise-lead.dto.js +22 -0
- package/dist/enterprise/dto/add-enterprise-lead.dto.js.map +1 -0
- package/dist/enterprise/dto/add-enterprise-student.dto.d.ts +5 -0
- package/dist/enterprise/dto/add-enterprise-student.dto.d.ts.map +1 -0
- package/dist/enterprise/dto/add-enterprise-student.dto.js +27 -0
- package/dist/enterprise/dto/add-enterprise-student.dto.js.map +1 -0
- package/dist/enterprise/dto/add-enterprise-user.dto.d.ts +7 -0
- package/dist/enterprise/dto/add-enterprise-user.dto.d.ts.map +1 -0
- package/dist/enterprise/dto/add-enterprise-user.dto.js +36 -0
- package/dist/enterprise/dto/add-enterprise-user.dto.js.map +1 -0
- package/dist/enterprise/dto/create-enterprise.dto.d.ts +10 -0
- package/dist/enterprise/dto/create-enterprise.dto.d.ts.map +1 -0
- package/dist/enterprise/dto/create-enterprise.dto.js +54 -0
- package/dist/enterprise/dto/create-enterprise.dto.js.map +1 -0
- package/dist/enterprise/dto/update-enterprise-student.dto.d.ts +4 -0
- package/dist/enterprise/dto/update-enterprise-student.dto.d.ts.map +1 -0
- package/dist/enterprise/dto/update-enterprise-student.dto.js +22 -0
- package/dist/enterprise/dto/update-enterprise-student.dto.js.map +1 -0
- package/dist/enterprise/dto/update-enterprise-user.dto.d.ts +5 -0
- package/dist/enterprise/dto/update-enterprise-user.dto.d.ts.map +1 -0
- package/dist/enterprise/dto/update-enterprise-user.dto.js +27 -0
- package/dist/enterprise/dto/update-enterprise-user.dto.js.map +1 -0
- package/dist/enterprise/dto/update-enterprise.dto.d.ts +6 -0
- package/dist/enterprise/dto/update-enterprise.dto.d.ts.map +1 -0
- package/dist/enterprise/dto/update-enterprise.dto.js +9 -0
- package/dist/enterprise/dto/update-enterprise.dto.js.map +1 -0
- package/dist/enterprise/enterprise.controller.d.ts +269 -0
- package/dist/enterprise/enterprise.controller.d.ts.map +1 -0
- package/dist/enterprise/enterprise.controller.js +311 -0
- package/dist/enterprise/enterprise.controller.js.map +1 -0
- package/dist/enterprise/enterprise.module.d.ts +3 -0
- package/dist/enterprise/enterprise.module.d.ts.map +1 -0
- package/dist/enterprise/enterprise.module.js +25 -0
- package/dist/enterprise/enterprise.module.js.map +1 -0
- package/dist/enterprise/enterprise.service.d.ts +282 -0
- package/dist/enterprise/enterprise.service.d.ts.map +1 -0
- package/dist/enterprise/enterprise.service.js +627 -0
- package/dist/enterprise/enterprise.service.js.map +1 -0
- package/dist/evaluation/evaluation.controller.d.ts +56 -0
- package/dist/evaluation/evaluation.controller.d.ts.map +1 -0
- package/dist/evaluation/evaluation.controller.js +76 -0
- package/dist/evaluation/evaluation.controller.js.map +1 -0
- package/dist/evaluation/evaluation.module.d.ts +3 -0
- package/dist/evaluation/evaluation.module.d.ts.map +1 -0
- package/dist/evaluation/evaluation.module.js +25 -0
- package/dist/evaluation/evaluation.module.js.map +1 -0
- package/dist/evaluation/evaluation.service.d.ts +67 -0
- package/dist/evaluation/evaluation.service.d.ts.map +1 -0
- package/dist/evaluation/evaluation.service.js +378 -0
- package/dist/evaluation/evaluation.service.js.map +1 -0
- package/dist/exam/dto/create-exam-question.dto.d.ts +25 -0
- package/dist/exam/dto/create-exam-question.dto.d.ts.map +1 -0
- package/dist/exam/dto/create-exam-question.dto.js +117 -0
- package/dist/exam/dto/create-exam-question.dto.js.map +1 -0
- package/dist/exam/dto/create-exam.dto.d.ts +11 -0
- package/dist/exam/dto/create-exam.dto.d.ts.map +1 -0
- package/dist/exam/dto/create-exam.dto.js +63 -0
- package/dist/exam/dto/create-exam.dto.js.map +1 -0
- package/dist/exam/dto/reorder-exam-questions.dto.d.ts +4 -0
- package/dist/exam/dto/reorder-exam-questions.dto.d.ts.map +1 -0
- package/dist/exam/dto/reorder-exam-questions.dto.js +23 -0
- package/dist/exam/dto/reorder-exam-questions.dto.js.map +1 -0
- package/dist/exam/dto/save-exam-attempt-answers.dto.d.ts +14 -0
- package/dist/exam/dto/save-exam-attempt-answers.dto.d.ts.map +1 -0
- package/dist/exam/dto/save-exam-attempt-answers.dto.js +68 -0
- package/dist/exam/dto/save-exam-attempt-answers.dto.js.map +1 -0
- package/dist/exam/dto/start-exam-attempt.dto.d.ts +4 -0
- package/dist/exam/dto/start-exam-attempt.dto.d.ts.map +1 -0
- package/dist/exam/dto/start-exam-attempt.dto.js +23 -0
- package/dist/exam/dto/start-exam-attempt.dto.js.map +1 -0
- package/dist/exam/dto/submit-exam-attempt.dto.d.ts +5 -0
- package/dist/exam/dto/submit-exam-attempt.dto.d.ts.map +1 -0
- package/dist/exam/dto/submit-exam-attempt.dto.js +23 -0
- package/dist/exam/dto/submit-exam-attempt.dto.js.map +1 -0
- package/dist/exam/dto/update-exam-question.dto.d.ts +6 -0
- package/dist/exam/dto/update-exam-question.dto.d.ts.map +1 -0
- package/dist/exam/dto/update-exam-question.dto.js +9 -0
- package/dist/exam/dto/update-exam-question.dto.js.map +1 -0
- package/dist/exam/dto/update-exam.dto.d.ts +6 -0
- package/dist/exam/dto/update-exam.dto.d.ts.map +1 -0
- package/dist/exam/dto/update-exam.dto.js +9 -0
- package/dist/exam/dto/update-exam.dto.js.map +1 -0
- package/dist/exam/exam-attempt.controller.d.ts +273 -0
- package/dist/exam/exam-attempt.controller.d.ts.map +1 -0
- package/dist/exam/exam-attempt.controller.js +84 -0
- package/dist/exam/exam-attempt.controller.js.map +1 -0
- package/dist/exam/exam-attempt.service.d.ts +302 -0
- package/dist/exam/exam-attempt.service.d.ts.map +1 -0
- package/dist/exam/exam-attempt.service.js +776 -0
- package/dist/exam/exam-attempt.service.js.map +1 -0
- package/dist/exam/exam.controller.d.ts +162 -0
- package/dist/exam/exam.controller.d.ts.map +1 -0
- package/dist/exam/exam.controller.js +158 -0
- package/dist/exam/exam.controller.js.map +1 -0
- package/dist/exam/exam.module.d.ts +3 -0
- package/dist/exam/exam.module.d.ts.map +1 -0
- package/dist/exam/exam.module.js +27 -0
- package/dist/exam/exam.module.js.map +1 -0
- package/dist/exam/exam.service.d.ts +179 -0
- package/dist/exam/exam.service.d.ts.map +1 -0
- package/dist/exam/exam.service.js +597 -0
- package/dist/exam/exam.service.js.map +1 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -1
- package/dist/instructor/dto/create-instructor.dto.d.ts +10 -0
- package/dist/instructor/dto/create-instructor.dto.d.ts.map +1 -0
- package/dist/instructor/dto/create-instructor.dto.js +55 -0
- package/dist/instructor/dto/create-instructor.dto.js.map +1 -0
- package/dist/instructor/dto/update-instructor.dto.d.ts +9 -0
- package/dist/instructor/dto/update-instructor.dto.d.ts.map +1 -0
- package/dist/instructor/dto/update-instructor.dto.js +51 -0
- package/dist/instructor/dto/update-instructor.dto.js.map +1 -0
- package/dist/instructor/instructor.controller.d.ts +52 -0
- package/dist/instructor/instructor.controller.d.ts.map +1 -0
- package/dist/instructor/instructor.controller.js +98 -0
- package/dist/instructor/instructor.controller.js.map +1 -0
- package/dist/instructor/instructor.module.d.ts +3 -0
- package/dist/instructor/instructor.module.d.ts.map +1 -0
- package/dist/instructor/instructor.module.js +25 -0
- package/dist/instructor/instructor.module.js.map +1 -0
- package/dist/instructor/instructor.service.d.ts +79 -0
- package/dist/instructor/instructor.service.d.ts.map +1 -0
- package/dist/instructor/instructor.service.js +528 -0
- package/dist/instructor/instructor.service.js.map +1 -0
- package/dist/lms.module.d.ts.map +1 -1
- package/dist/lms.module.js +36 -4
- package/dist/lms.module.js.map +1 -1
- package/dist/reports/reports.controller.d.ts +69 -0
- package/dist/reports/reports.controller.d.ts.map +1 -0
- package/dist/reports/reports.controller.js +40 -0
- package/dist/reports/reports.controller.js.map +1 -0
- package/dist/reports/reports.module.d.ts +3 -0
- package/dist/reports/reports.module.d.ts.map +1 -0
- package/dist/reports/reports.module.js +25 -0
- package/dist/reports/reports.module.js.map +1 -0
- package/dist/reports/reports.service.d.ts +80 -0
- package/dist/reports/reports.service.d.ts.map +1 -0
- package/dist/reports/reports.service.js +366 -0
- package/dist/reports/reports.service.js.map +1 -0
- package/dist/training/dto/create-training.dto.d.ts +19 -0
- package/dist/training/dto/create-training.dto.d.ts.map +1 -0
- package/dist/training/dto/create-training.dto.js +98 -0
- package/dist/training/dto/create-training.dto.js.map +1 -0
- package/dist/training/dto/update-training.dto.d.ts +6 -0
- package/dist/training/dto/update-training.dto.d.ts.map +1 -0
- package/dist/training/dto/update-training.dto.js +9 -0
- package/dist/training/dto/update-training.dto.js.map +1 -0
- package/dist/training/training.controller.d.ts +195 -0
- package/dist/training/training.controller.d.ts.map +1 -0
- package/dist/training/training.controller.js +104 -0
- package/dist/training/training.controller.js.map +1 -0
- package/dist/training/training.module.d.ts +3 -0
- package/dist/training/training.module.d.ts.map +1 -0
- package/dist/training/training.module.js +25 -0
- package/dist/training/training.module.js.map +1 -0
- package/dist/training/training.service.d.ts +213 -0
- package/dist/training/training.service.d.ts.map +1 -0
- package/dist/training/training.service.js +497 -0
- package/dist/training/training.service.js.map +1 -0
- package/hedhog/data/dashboard.yaml +6 -0
- package/hedhog/data/dashboard_component.yaml +153 -0
- package/hedhog/data/dashboard_component_role.yaml +97 -0
- package/hedhog/data/dashboard_item.yaml +167 -0
- package/hedhog/data/dashboard_role.yaml +6 -0
- package/hedhog/data/instructor_qualification.yaml +16 -0
- package/hedhog/data/menu.yaml +129 -19
- package/hedhog/data/role.yaml +25 -1
- package/hedhog/data/route.yaml +867 -0
- package/hedhog/frontend/app/_components/class-form-sheet.tsx.ejs +1992 -0
- package/hedhog/frontend/app/_components/course-form-sheet.tsx.ejs +480 -0
- package/hedhog/frontend/app/_components/create-lms-instructor-sheet.tsx.ejs +591 -0
- package/hedhog/frontend/app/_components/create-lms-person-sheet.tsx.ejs +164 -0
- package/hedhog/frontend/app/_components/create-lms-student-person-sheet.tsx.ejs +120 -0
- package/hedhog/frontend/app/_components/lms-class-calendar.tsx.ejs +272 -0
- package/hedhog/frontend/app/_components/mobile-calendar.tsx.ejs +277 -0
- package/hedhog/frontend/app/_lib/editor/canvasInstance.ts.ejs +48 -0
- package/hedhog/frontend/app/_lib/editor/pctHelpers.ts.ejs +50 -0
- package/hedhog/frontend/app/_lib/editor/templateSerializer.ts.ejs +268 -0
- package/hedhog/frontend/app/_lib/editor/types.ts.ejs +94 -0
- package/hedhog/frontend/app/_lib/store/useTemplateStore.ts.ejs +284 -0
- package/hedhog/frontend/app/certificates/issued/page.tsx.ejs +638 -0
- package/hedhog/frontend/app/certificates/models/CanvasStage.tsx.ejs +916 -0
- package/hedhog/frontend/app/certificates/models/LeftPanel.tsx.ejs +200 -0
- package/hedhog/frontend/app/certificates/models/RightPanel.tsx.ejs +769 -0
- package/hedhog/frontend/app/certificates/models/TemplateEditorPage.tsx.ejs +104 -0
- package/hedhog/frontend/app/certificates/models/TopBar.tsx.ejs +354 -0
- package/hedhog/frontend/app/certificates/models/editor/page.tsx.ejs +5 -0
- package/hedhog/frontend/app/certificates/models/page.tsx.ejs +883 -0
- package/hedhog/frontend/app/classes/[id]/_components/event-summary-popover.tsx.ejs +279 -0
- package/hedhog/frontend/app/classes/[id]/_components/quick-create-session-popover.tsx.ejs +1027 -0
- package/hedhog/frontend/app/classes/[id]/page.tsx.ejs +3130 -993
- package/hedhog/frontend/app/classes/page.tsx.ejs +2731 -759
- package/hedhog/frontend/app/courses/[id]/_components/CourseCertificateCard.tsx.ejs +80 -0
- package/hedhog/frontend/app/courses/[id]/_components/CourseClassificationCard.tsx.ejs +226 -0
- package/hedhog/frontend/app/courses/[id]/_components/CourseContentCard.tsx.ejs +71 -0
- package/hedhog/frontend/app/courses/[id]/_components/CourseDangerZoneCard.tsx.ejs +42 -0
- package/hedhog/frontend/app/courses/[id]/_components/CourseFlagsCard.tsx.ejs +111 -0
- package/hedhog/frontend/app/courses/[id]/_components/CourseMainInfoCard.tsx.ejs +113 -0
- package/hedhog/frontend/app/courses/[id]/_components/CourseMediaCard.tsx.ejs +215 -0
- package/hedhog/frontend/app/courses/[id]/_components/CourseMultiEntityPicker.tsx.ejs +236 -0
- package/hedhog/frontend/app/courses/[id]/_components/CourseRelationsCard.tsx.ejs +141 -0
- package/hedhog/frontend/app/courses/[id]/_components/CourseSectionCard.tsx.ejs +57 -0
- package/hedhog/frontend/app/courses/[id]/_components/CourseSummaryCard.tsx.ejs +60 -0
- package/hedhog/frontend/app/courses/[id]/_components/course-edit-types.ts.ejs +33 -0
- package/hedhog/frontend/app/courses/[id]/page.tsx.ejs +933 -1103
- package/hedhog/frontend/app/courses/[id]/structure/page.tsx.ejs +699 -117
- package/hedhog/frontend/app/courses/page.tsx.ejs +1018 -1042
- package/hedhog/frontend/app/enterprise/[id]/page.tsx.ejs +317 -0
- package/hedhog/frontend/app/enterprise/_components/enterprise-activity-panel.tsx.ejs +88 -0
- package/hedhog/frontend/app/enterprise/_components/enterprise-admin-create-sheet.tsx.ejs +318 -0
- package/hedhog/frontend/app/enterprise/_components/enterprise-administrators-tab.tsx.ejs +332 -0
- package/hedhog/frontend/app/enterprise/_components/enterprise-class-create-sheet.tsx.ejs +57 -0
- package/hedhog/frontend/app/enterprise/_components/enterprise-classes-tab.tsx.ejs +390 -0
- package/hedhog/frontend/app/enterprise/_components/enterprise-company-identity-card.tsx.ejs +112 -0
- package/hedhog/frontend/app/enterprise/_components/enterprise-course-create-sheet.tsx.ejs +183 -0
- package/hedhog/frontend/app/enterprise/_components/enterprise-courses-tab.tsx.ejs +363 -0
- package/hedhog/frontend/app/enterprise/_components/enterprise-detail-constants.ts.ejs +88 -0
- package/hedhog/frontend/app/enterprise/_components/enterprise-detail-sheet.tsx.ejs +548 -0
- package/hedhog/frontend/app/enterprise/_components/enterprise-detail-utils.ts.ejs +33 -0
- package/hedhog/frontend/app/enterprise/_components/enterprise-mocks.ts.ejs +266 -0
- package/hedhog/frontend/app/enterprise/_components/enterprise-person-picker.ts.ejs +31 -0
- package/hedhog/frontend/app/enterprise/_components/enterprise-progress-bar.tsx.ejs +21 -0
- package/hedhog/frontend/app/enterprise/_components/enterprise-related-tab.tsx.ejs +187 -0
- package/hedhog/frontend/app/enterprise/_components/enterprise-sheet.tsx.ejs +397 -0
- package/hedhog/frontend/app/enterprise/_components/enterprise-student-create-sheet.tsx.ejs +167 -0
- package/hedhog/frontend/app/enterprise/_components/enterprise-students-tab.tsx.ejs +267 -0
- package/hedhog/frontend/app/enterprise/_components/enterprise-system-user-picker.ts.ejs +42 -0
- package/hedhog/frontend/app/enterprise/_components/enterprise-types.ts.ejs +96 -0
- package/hedhog/frontend/app/enterprise/_components/enterprise-user-create-sheet.tsx.ejs +207 -0
- package/hedhog/frontend/app/enterprise/_components/enterprise-user-distribution-chart.tsx.ejs +149 -0
- package/hedhog/frontend/app/enterprise/page.tsx.ejs +596 -0
- package/hedhog/frontend/app/evaluations/page.tsx.ejs +1250 -0
- package/hedhog/frontend/app/exams/[id]/attempt/page.tsx.ejs +642 -196
- package/hedhog/frontend/app/exams/[id]/page.tsx.ejs +11 -0
- package/hedhog/frontend/app/exams/[id]/questions/page.tsx.ejs +1316 -436
- package/hedhog/frontend/app/exams/page.tsx.ejs +799 -546
- package/hedhog/frontend/app/layout.tsx.ejs +5 -0
- package/hedhog/frontend/app/page.tsx.ejs +5 -1222
- package/hedhog/frontend/app/reports/courses/page.tsx.ejs +843 -0
- package/hedhog/frontend/app/reports/dashboard/page.tsx.ejs +890 -0
- package/hedhog/frontend/app/reports/page.tsx.ejs +802 -808
- package/hedhog/frontend/app/reports/students/page.tsx.ejs +772 -0
- package/hedhog/frontend/app/training/page.tsx.ejs +1873 -628
- package/hedhog/frontend/messages/en.json +1606 -111
- package/hedhog/frontend/messages/pt.json +1636 -134
- package/hedhog/frontend/widgets/active-classes-kpi.tsx.ejs +74 -0
- package/hedhog/frontend/widgets/active-courses-kpi.tsx.ejs +74 -0
- package/hedhog/frontend/widgets/approval-rate-kpi.tsx.ejs +81 -0
- package/hedhog/frontend/widgets/category-distribution-chart.tsx.ejs +119 -0
- package/hedhog/frontend/widgets/class-calendar.tsx.ejs +440 -0
- package/hedhog/frontend/widgets/completion-rate-kpi.tsx.ejs +81 -0
- package/hedhog/frontend/widgets/engagement-chart.tsx.ejs +120 -0
- package/hedhog/frontend/widgets/footer-summary.tsx.ejs +80 -0
- package/hedhog/frontend/widgets/issued-certificates-kpi.tsx.ejs +74 -0
- package/hedhog/frontend/widgets/latest-enrollments.tsx.ejs +166 -0
- package/hedhog/frontend/widgets/student-growth-chart.tsx.ejs +89 -0
- package/hedhog/frontend/widgets/top-courses-chart.tsx.ejs +104 -0
- package/hedhog/frontend/widgets/total-students-kpi.tsx.ejs +78 -0
- package/hedhog/frontend/widgets/upcoming-classes.tsx.ejs +152 -0
- package/hedhog/table/course.yaml +28 -10
- package/hedhog/table/course_class_group.yaml +8 -0
- package/hedhog/table/course_class_session.yaml +33 -0
- package/hedhog/table/course_instructor.yaml +27 -0
- package/hedhog/table/enterprise.yaml +29 -0
- package/hedhog/table/enterprise_class_group.yaml +20 -0
- package/hedhog/table/enterprise_course.yaml +23 -0
- package/hedhog/table/enterprise_student.yaml +24 -0
- package/hedhog/table/enterprise_user.yaml +35 -0
- package/hedhog/table/instructor_qualification.yaml +26 -0
- package/hedhog/table/instructor_qualification_assignment.yaml +22 -0
- package/hedhog/table/question.yaml +6 -0
- package/package.json +6 -6
- package/src/certificate/certificate.controller.ts +83 -0
- package/src/certificate/certificate.module.ts +13 -0
- package/src/certificate/certificate.service.ts +413 -0
- package/src/certificate/dto/create-certificate-template.dto.ts +25 -0
- package/src/certificate/dto/update-certificate-template.dto.ts +6 -0
- package/src/class-group/class-group.controller.ts +189 -0
- package/src/class-group/class-group.module.ts +12 -0
- package/src/class-group/class-group.service.ts +1802 -0
- package/src/class-group/dto/create-class-group.dto.ts +139 -0
- package/src/class-group/dto/create-session.dto.ts +102 -0
- package/src/class-group/dto/enrollment.dto.ts +70 -0
- package/src/class-group/dto/update-class-group.dto.ts +4 -0
- package/src/class-group/dto/update-session.dto.ts +9 -0
- package/src/course/course-structure.controller.ts +85 -0
- package/src/course/course-structure.service.ts +525 -0
- package/src/course/course.controller.ts +69 -0
- package/src/course/course.module.ts +15 -0
- package/src/course/course.service.ts +920 -0
- package/src/course/dto/create-course-structure-lesson.dto.ts +97 -0
- package/src/course/dto/create-course-structure-session.dto.ts +22 -0
- package/src/course/dto/create-course.dto.ts +111 -0
- package/src/course/dto/update-course-structure-lesson.dto.ts +6 -0
- package/src/course/dto/update-course-structure-session.dto.ts +6 -0
- package/src/course/dto/update-course.dto.ts +4 -0
- package/src/dashboard/dashboard.controller.ts +14 -0
- package/src/dashboard/dashboard.module.ts +12 -0
- package/src/dashboard/dashboard.service.ts +726 -0
- package/src/enterprise/dto/add-enterprise-class-group.dto.ts +7 -0
- package/src/enterprise/dto/add-enterprise-course.dto.ts +11 -0
- package/src/enterprise/dto/add-enterprise-student.dto.ts +16 -0
- package/src/enterprise/dto/add-enterprise-user.dto.ts +23 -0
- package/src/enterprise/dto/create-enterprise.dto.ts +41 -0
- package/src/enterprise/dto/update-enterprise-student.dto.ts +7 -0
- package/src/enterprise/dto/update-enterprise-user.dto.ts +11 -0
- package/src/enterprise/dto/update-enterprise.dto.ts +4 -0
- package/src/enterprise/enterprise.controller.ts +233 -0
- package/src/enterprise/enterprise.module.ts +12 -0
- package/src/enterprise/enterprise.service.ts +712 -0
- package/src/evaluation/evaluation.controller.ts +44 -0
- package/src/evaluation/evaluation.module.ts +12 -0
- package/src/evaluation/evaluation.service.ts +394 -0
- package/src/exam/dto/create-exam-question.dto.ts +103 -0
- package/src/exam/dto/create-exam.dto.ts +41 -0
- package/src/exam/dto/reorder-exam-questions.dto.ts +8 -0
- package/src/exam/dto/save-exam-attempt-answers.dto.ts +55 -0
- package/src/exam/dto/start-exam-attempt.dto.ts +8 -0
- package/src/exam/dto/submit-exam-attempt.dto.ts +8 -0
- package/src/exam/dto/update-exam-question.dto.ts +4 -0
- package/src/exam/dto/update-exam.dto.ts +4 -0
- package/src/exam/exam-attempt.controller.ts +65 -0
- package/src/exam/exam-attempt.service.ts +1008 -0
- package/src/exam/exam.controller.ts +102 -0
- package/src/exam/exam.module.ts +14 -0
- package/src/exam/exam.service.ts +784 -0
- package/src/index.ts +29 -0
- package/src/instructor/dto/create-instructor.dto.ts +43 -0
- package/src/instructor/dto/update-instructor.dto.ts +38 -0
- package/src/instructor/instructor.controller.ts +73 -0
- package/src/instructor/instructor.module.ts +12 -0
- package/src/instructor/instructor.service.ts +646 -0
- package/src/lms.module.ts +36 -4
- package/src/reports/reports.controller.ts +14 -0
- package/src/reports/reports.module.ts +12 -0
- package/src/reports/reports.service.ts +485 -0
- package/src/training/dto/create-training.dto.ts +81 -0
- package/src/training/dto/update-training.dto.ts +4 -0
- package/src/training/training.controller.ts +68 -0
- package/src/training/training.module.ts +12 -0
- package/src/training/training.service.ts +574 -0
package/README.md
CHANGED
|
@@ -16,10 +16,135 @@ O módulo `@hed-hog/lms` é responsável pela gestão do sistema de Learning Man
|
|
|
16
16
|
- Organização de trilhas de aprendizagem e seus passos.
|
|
17
17
|
- Suporte a imagens e arquivos relacionados a cursos, exames e trilhas.
|
|
18
18
|
- Avaliações e feedbacks sobre tópicos específicos do LMS.
|
|
19
|
+
- Gestão de turmas (class groups), sessões e presença.
|
|
20
|
+
- Administração de empresas (enterprises) e seus usuários, cursos, turmas e leads.
|
|
21
|
+
- Dashboard com KPIs e estatísticas do LMS.
|
|
19
22
|
|
|
20
23
|
## 3. Endpoints
|
|
21
24
|
|
|
22
|
-
|
|
25
|
+
### Certificados
|
|
26
|
+
|
|
27
|
+
| Método | Path | Autenticação | Descrição | Params/Query/Body | Resposta | Erros Comuns |
|
|
28
|
+
|--------|-------------------------------------------|--------------|------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------|------------------------------------------|
|
|
29
|
+
| GET | /lms/certificates/templates | Sim | Lista templates de certificados com paginação e filtros. | Query: `page` (número), `pageSize` (número), `search` (string), `status` (draft|active|inactive) | Paginação com lista de templates e seus dados básicos. | Status inválido, parâmetros inválidos |
|
|
30
|
+
| GET | /lms/certificates/templates/:id | Sim | Obtém template de certificado pelo ID. | Param: `id` (número) | Dados do template de certificado. | Template não encontrado |
|
|
31
|
+
| POST | /lms/certificates/templates | Sim | Cria um novo template de certificado. | Body: `CreateCertificateTemplateDto` | Template criado com dados completos. | JSON inválido em templateContent, slug duplicado |
|
|
32
|
+
| PATCH | /lms/certificates/templates/:id | Sim | Atualiza template existente. | Param: `id` (número), Body: `UpdateCertificateTemplateDto` | Template atualizado. | Template não encontrado, JSON inválido |
|
|
33
|
+
| DELETE | /lms/certificates/templates/:id | Sim | Remove template de certificado pelo ID. | Param: `id` (número) | `{ success: true }` | Template não encontrado, restrição de exclusão |
|
|
34
|
+
| POST | /lms/certificates/templates/background-image | Sim | Upload de imagem de fundo para template. | Form-data: campo `file` (imagem) | Dados do arquivo enviado (id, url, filename, etc). | Arquivo ausente, tipo inválido |
|
|
35
|
+
| GET | /lms/certificates/issued | Sim | Lista certificados emitidos com paginação e filtros. | Query: `page`, `pageSize`, `search`, `type` (course|exam|course_class_group|learning_path) | Paginação com lista de certificados emitidos e dados relacionados. | Tipo inválido |
|
|
36
|
+
|
|
37
|
+
### Turmas (Class Groups)
|
|
38
|
+
|
|
39
|
+
| Método | Path | Autenticação | Descrição | Params/Query/Body | Resposta | Erros Comuns |
|
|
40
|
+
|--------|----------------------------------------|--------------|------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------|------------------------------------------|
|
|
41
|
+
| GET | /lms/classes | Sim | Lista turmas com paginação e filtros. | Query: `page`, `pageSize`, `search`, `status` (open|ongoing|completed|cancelled), `deliveryMode` (presential|online|hybrid), `courseId` | Paginação com lista de turmas e dados resumidos. | Status ou deliveryMode inválidos |
|
|
42
|
+
| GET | /lms/classes/stats | Sim | Estatísticas gerais das turmas. | - | Estatísticas como total, vagas abertas, taxa de ocupação, etc. | - |
|
|
43
|
+
| GET | /lms/classes/:id | Sim | Obtém turma pelo ID. | Param: `id` (número) | Dados detalhados da turma, incluindo resumo de sessões. | Turma não encontrada |
|
|
44
|
+
| POST | /lms/classes | Sim | Cria nova turma. | Body: `CreateClassGroupDto` | Dados da turma criada. | Curso ou instrutor não encontrados, conflito de código |
|
|
45
|
+
| PATCH | /lms/classes/:id | Sim | Atualiza turma. | Param: `id` (número), Body: `UpdateClassGroupDto` | Dados da turma atualizada. | Turma não encontrada, conflito de código |
|
|
46
|
+
| DELETE | /lms/classes/:id | Sim | Remove turma pelo ID. | Param: `id` (número) | `{ success: true }` | Turma não encontrada |
|
|
47
|
+
|
|
48
|
+
#### Pessoas na turma (estudantes e instrutores)
|
|
49
|
+
|
|
50
|
+
| Método | Path | Autenticação | Descrição | Params/Query/Body | Resposta | Erros Comuns |
|
|
51
|
+
|--------|----------------------------------------|--------------|------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------|------------------------------------------|
|
|
52
|
+
| GET | /lms/classes/:id/people/search | Sim | Pesquisa pessoas para adicionar na turma. | Param: `id` (número), Query: `q` (string) | Lista de pessoas com flags de instrutor e matrícula. | Turma não encontrada |
|
|
53
|
+
| GET | /lms/classes/:id/students | Sim | Lista estudantes matriculados na turma. | Param: `id` (número), Query: `search` (string) | Lista de estudantes com dados de contato e status. | Turma não encontrada |
|
|
54
|
+
| POST | /lms/classes/:id/students | Sim | Matricula estudante existente na turma. | Param: `id` (número), Body: `{ personId: number }` | Dados da matrícula criada ou atualizada. | Turma ou estudante não encontrados, matrícula duplicada |
|
|
55
|
+
| POST | /lms/classes/:id/students/create | Sim | Cria pessoa e matricula na turma. | Param: `id` (número), Body: `CreateStudentAndEnrollDto` | Dados da pessoa criada e matriculada. | Turma não encontrada, dados inválidos |
|
|
56
|
+
| GET | /lms/classes/:id/students/:personId | Sim | Obtém perfil do estudante na turma. | Param: `id` (número), `personId` (número) | Dados do estudante com contatos e status. | Matrícula não encontrada |
|
|
57
|
+
| PATCH | /lms/classes/:id/students/:personId | Sim | Atualiza perfil do estudante na turma. | Param: `id` (número), `personId` (número), Body: `UpdateStudentProfileDto` | Dados atualizados do estudante. | Matrícula não encontrada, dados inválidos |
|
|
58
|
+
| DELETE | /lms/classes/:id/students/:personId | Sim | Remove estudante da turma (status cancelado). | Param: `id` (número), `personId` (número) | `{ success: true }` | Matrícula não encontrada |
|
|
59
|
+
|
|
60
|
+
#### Sessões da turma
|
|
61
|
+
|
|
62
|
+
| Método | Path | Autenticação | Descrição | Params/Query/Body | Resposta | Erros Comuns |
|
|
63
|
+
|--------|----------------------------------------|--------------|------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------|------------------------------------------|
|
|
64
|
+
| GET | /lms/classes/:id/sessions | Sim | Lista sessões da turma. | Param: `id` (número) | Lista de sessões com dados detalhados. | Turma não encontrada |
|
|
65
|
+
| POST | /lms/classes/:id/sessions | Sim | Cria sessão na turma. | Param: `id` (número), Body: `CreateSessionDto` | Dados da sessão criada. | Turma ou instrutor não encontrados, dados inválidos |
|
|
66
|
+
| PATCH | /lms/classes/:id/sessions/:sessionId | Sim | Atualiza sessão. | Param: `id` (número), `sessionId` (número), Body: `UpdateSessionDto` | Dados da sessão atualizada. | Sessão não encontrada, dados inválidos |
|
|
67
|
+
| DELETE | /lms/classes/:id/sessions/:sessionId | Sim | Remove sessão. | Param: `id` (número), `sessionId` (número), Query: `scope` = `single` ou `series` | `{ success: true }` | Sessão não encontrada |
|
|
68
|
+
|
|
69
|
+
#### Presença em sessões
|
|
70
|
+
|
|
71
|
+
| Método | Path | Autenticação | Descrição | Params/Query/Body | Resposta | Erros Comuns |
|
|
72
|
+
|--------|------------------------------------------------|--------------|------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------|------------------------------------------|
|
|
73
|
+
| GET | /lms/classes/:id/sessions/:sessionId/attendance | Sim | Obtém lista de presenças na sessão. | Param: `id` (número), `sessionId` (número) | Lista de presenças com dados do estudante e status de presença. | Sessão não encontrada |
|
|
74
|
+
| POST | /lms/classes/:id/sessions/:sessionId/attendance | Sim | Salva presenças. | Param: `id` (número), `sessionId` (número), Body: `SaveAttendanceDto` | `{ success: true }` | Sessão não encontrada |
|
|
75
|
+
|
|
76
|
+
### Cursos
|
|
77
|
+
|
|
78
|
+
| Método | Path | Autenticação | Descrição | Params/Query/Body | Resposta | Erros Comuns |
|
|
79
|
+
|--------|-----------------------|--------------|------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------|------------------------------------------|
|
|
80
|
+
| GET | /lms/courses | Sim | Lista cursos com paginação e filtros. | Query: `page`, `pageSize`, `search`, `status` (draft|published|archived), `level` (beginner|intermediate|advanced), `category` (slug) | Paginação com lista de cursos e dados resumidos. | Status ou level inválidos |
|
|
81
|
+
| GET | /lms/courses/stats | Sim | Estatísticas gerais dos cursos. | - | KPIs como total, publicados, estudantes, etc. | - |
|
|
82
|
+
| GET | /lms/courses/:id | Sim | Obtém curso pelo ID. | Param: `id` (número) | Dados detalhados do curso, incluindo módulos, aulas e instrutores. | Curso não encontrado |
|
|
83
|
+
| POST | /lms/courses | Sim | Cria novo curso. | Body: `CreateCourseDto` | Dados do curso criado. | Dados inválidos, slug duplicado |
|
|
84
|
+
| PATCH | /lms/courses/:id | Sim | Atualiza curso. | Param: `id` (número), Body: `UpdateCourseDto` | Dados do curso atualizado. | Curso não encontrado, dados inválidos |
|
|
85
|
+
| DELETE | /lms/courses/:id | Sim | Remove curso pelo ID. | Param: `id` (número) | `{ success: true }` | Curso não encontrado |
|
|
86
|
+
|
|
87
|
+
### Estrutura do curso
|
|
88
|
+
|
|
89
|
+
| Método | Path | Autenticação | Descrição | Params/Query/Body | Resposta | Erros Comuns |
|
|
90
|
+
|--------|----------------------------------------------|--------------|------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------|------------------------------------------|
|
|
91
|
+
| GET | /lms/courses/:id/structure | Sim | Obtém estrutura do curso (módulos e aulas). | Param: `id` (número) | Estrutura com sessões (módulos) e aulas detalhadas. | Curso não encontrado |
|
|
92
|
+
| POST | /lms/courses/:id/structure/sessions | Sim | Cria módulo (sessão) no curso. | Param: `id` (número), Body: `CreateCourseStructureSessionDto` | Dados do módulo criado. | Curso não encontrado, dados inválidos |
|
|
93
|
+
| PATCH | /lms/courses/:id/structure/sessions/:sessionId | Sim | Atualiza módulo. | Param: `id` (número), `sessionId` (número), Body: `UpdateCourseStructureSessionDto` | Dados do módulo atualizado. | Módulo não encontrado |
|
|
94
|
+
| DELETE | /lms/courses/:id/structure/sessions/:sessionId | Sim | Remove módulo. | Param: `id` (número), `sessionId` (número) | `{ success: true }` | Módulo não encontrado |
|
|
95
|
+
| POST | /lms/courses/:id/structure/sessions/:sessionId/lessons | Sim | Cria aula no módulo. | Param: `id` (número), `sessionId` (número), Body: `CreateCourseStructureLessonDto` | Dados da aula criada. | Módulo não encontrado, dados inválidos |
|
|
96
|
+
| PATCH | /lms/courses/:id/structure/sessions/:sessionId/lessons/:lessonId | Sim | Atualiza aula. | Param: `id` (número), `sessionId` (número), `lessonId` (número), Body: `UpdateCourseStructureLessonDto` | Dados da aula atualizada. | Aula não encontrada |
|
|
97
|
+
| DELETE | /lms/courses/:id/structure/sessions/:sessionId/lessons/:lessonId | Sim | Remove aula. | Param: `id` (número), `sessionId` (número), `lessonId` (número) | `{ success: true }` | Aula não encontrada |
|
|
98
|
+
|
|
99
|
+
### Exames (tentativas)
|
|
100
|
+
|
|
101
|
+
| Método | Path | Autenticação | Descrição | Params/Query/Body | Resposta | Erros Comuns |
|
|
102
|
+
|--------|----------------------------------------------|--------------|------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------|------------------------------------------|
|
|
103
|
+
| GET | /lms/exams/:id/attempt | Sim | Obtém estado da tentativa de exame para usuário. | Param: `id` (número), Query opcional: `studentId` (número) | Estado atual da tentativa ou nulo. | Exame não encontrado |
|
|
104
|
+
| POST | /lms/exams/:id/attempt/start | Sim | Inicia tentativa de exame. | Param: `id` (número), Body: `StartExamAttemptDto` | Dados da tentativa iniciada. | Exame não encontrado |
|
|
105
|
+
| PATCH | /lms/exams/:id/attempt/:attemptId/answers | Sim | Salva respostas da tentativa. | Param: `id` (número), `attemptId` (número), Body: `SaveExamAttemptAnswersDto` | Dados atualizados da tentativa. | Tentativa não encontrada |
|
|
106
|
+
| POST | /lms/exams/:id/attempt/:attemptId/submit | Sim | Submete tentativa de exame. | Param: `id` (número), `attemptId` (número), Body: `SubmitExamAttemptDto` | Resultado da submissão. | Tentativa não encontrada |
|
|
107
|
+
|
|
108
|
+
### Dashboard
|
|
109
|
+
|
|
110
|
+
| Método | Path | Autenticação | Descrição | Params/Query/Body | Resposta | Erros Comuns |
|
|
111
|
+
|--------|-----------------|--------------|------------------------------------------------------------------------------------------------|------------------|--------------------------------------------------------------------------------------------|--------------|
|
|
112
|
+
| GET | /lms/dashboard | Sim | Obtém dados do dashboard do LMS com KPIs, gráficos, eventos, matrículas recentes e próximas turmas. | Header: `accept-language` (opcional) | Dados agregados para dashboard do LMS. | - |
|
|
113
|
+
|
|
114
|
+
### Enterprise (Empresas)
|
|
115
|
+
|
|
116
|
+
| Método | Path | Autenticação | Descrição | Params/Query/Body | Resposta | Erros Comuns |
|
|
117
|
+
|--------|------------------------------|--------------|------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------|------------------------------------------|
|
|
118
|
+
| GET | /lms/enterprise | Sim | Lista empresas com paginação e filtros. | Query: `page`, `pageSize`, `search`, `status`, `crmPersonId` | Paginação com lista de empresas. | - |
|
|
119
|
+
| POST | /lms/enterprise | Sim | Cria nova empresa. | Body: `CreateEnterpriseDto` | Dados da empresa criada. | Dados inválidos |
|
|
120
|
+
| GET | /lms/enterprise/:id | Sim | Obtém empresa pelo ID. | Param: `id` (número) | Dados da empresa. | Empresa não encontrada |
|
|
121
|
+
| PATCH | /lms/enterprise/:id | Sim | Atualiza empresa. | Param: `id` (número), Body: `UpdateEnterpriseDto` | Dados da empresa atualizada. | Empresa não encontrada |
|
|
122
|
+
| DELETE | /lms/enterprise/:id | Sim | Remove empresa pelo ID. | Param: `id` (número) | `{ success: true }` | Empresa não encontrada |
|
|
123
|
+
|
|
124
|
+
#### Usuários da empresa
|
|
125
|
+
|
|
126
|
+
| Método | Path | Autenticação | Descrição | Params/Query/Body | Resposta | Erros Comuns |
|
|
127
|
+
|--------|------------------------------|--------------|------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------|------------------------------------------|
|
|
128
|
+
| GET | /lms/enterprise/:id/users | Sim | Lista usuários da empresa com paginação e filtro. | Param: `id` (número), Query: `page`, `pageSize`, `search` | Paginação com lista de usuários. | Empresa não encontrada |
|
|
129
|
+
| POST | /lms/enterprise/:id/users | Sim | Adiciona usuário à empresa. | Param: `id` (número), Body: `AddEnterpriseUserDto` | Dados do usuário adicionado. | Empresa não encontrada, dados inválidos |
|
|
130
|
+
| PATCH | /lms/enterprise/:id/users/:userId | Sim | Atualiza usuário da empresa. | Param: `id` (número), `userId` (número), Body: `UpdateEnterpriseUserDto` | Dados do usuário atualizado. | Usuário ou empresa não encontrados |
|
|
131
|
+
| DELETE | /lms/enterprise/:id/users/:userId | Sim | Remove usuário da empresa. | Param: `id` (número), `userId` (número) | `{ success: true }` | Usuário ou empresa não encontrados |
|
|
132
|
+
|
|
133
|
+
#### Cursos da empresa
|
|
134
|
+
|
|
135
|
+
| Método | Path | Autenticação | Descrição | Params/Query/Body | Resposta | Erros Comuns |
|
|
136
|
+
|--------|------------------------------|--------------|------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------|------------------------------------------|
|
|
137
|
+
| GET | /lms/enterprise/:id/courses | Sim | Lista cursos da empresa com paginação e filtro. | Param: `id` (número), Query: `page`, `pageSize`, `search` | Paginação com lista de cursos. | Empresa não encontrada |
|
|
138
|
+
| POST | /lms/enterprise/:id/courses | Sim | Adiciona curso à empresa. | Param: `id` (número), Body: `AddEnterpriseCourseDto` | Dados do curso adicionado. | Empresa não encontrada, dados inválidos |
|
|
139
|
+
| DELETE | /lms/enterprise/:id/courses/:courseId | Sim | Remove curso da empresa. | Param: `id` (número), `courseId` (número) | `{ success: true }` | Curso ou empresa não encontrados |
|
|
140
|
+
|
|
141
|
+
#### Turmas da empresa
|
|
142
|
+
|
|
143
|
+
| Método | Path | Autenticação | Descrição | Params/Query/Body | Resposta | Erros Comuns |
|
|
144
|
+
|--------|------------------------------|--------------|------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------|------------------------------------------|
|
|
145
|
+
| GET | /lms/enterprise/:id/classes | Sim | Lista turmas da empresa com paginação e filtro. | Param: `id` (número), Query: `page`, `pageSize`, `search` | Paginação com lista de turmas. | Empresa não encontrada |
|
|
146
|
+
| POST | /lms/enterprise/:id/classes | Sim | Adiciona turma à empresa. | Param: `id` (número), Body: `AddEnterpriseClassGroupDto` | Dados da turma adicionada. | Empresa não encontrada, dados inválidos |
|
|
147
|
+
| DELETE | /lms/enterprise/:id/classes/:classGroupId | Sim | Remove turma da empresa. | Param: `id` (número), `classGroupId` (número) | `{ success: true }` | Turma ou empresa não encontrados |
|
|
23
148
|
|
|
24
149
|
## 4. Regras de autenticação e autorização
|
|
25
150
|
|
|
@@ -29,8 +154,212 @@ O módulo `@hed-hog/lms` é responsável pela gestão do sistema de Learning Man
|
|
|
29
154
|
|
|
30
155
|
## 5. Estruturas de request/response
|
|
31
156
|
|
|
32
|
-
|
|
33
|
-
|
|
157
|
+
### Exemplos principais de DTOs usados nos endpoints
|
|
158
|
+
|
|
159
|
+
- **CreateCertificateTemplateDto**
|
|
160
|
+
|
|
161
|
+
```ts
|
|
162
|
+
{
|
|
163
|
+
name: string; // obrigatório, max 255
|
|
164
|
+
slug?: string; // opcional, max 255
|
|
165
|
+
description?: string; // opcional
|
|
166
|
+
templateContent: string; // obrigatório, JSON válido
|
|
167
|
+
status?: 'draft' | 'active' | 'inactive'; // opcional
|
|
168
|
+
}
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
- **CreateClassGroupDto**
|
|
172
|
+
|
|
173
|
+
```ts
|
|
174
|
+
{
|
|
175
|
+
code: string; // obrigatório, max 50
|
|
176
|
+
courseId: number; // obrigatório
|
|
177
|
+
instructorId?: number; // opcional
|
|
178
|
+
title: string; // obrigatório, max 255
|
|
179
|
+
description?: string; // opcional
|
|
180
|
+
deliveryMode: 'presential' | 'online' | 'hybrid'; // obrigatório
|
|
181
|
+
status?: 'open' | 'ongoing' | 'completed' | 'cancelled'; // opcional
|
|
182
|
+
startDate: string; // obrigatório, ISO8601
|
|
183
|
+
endDate?: string; // opcional, ISO8601
|
|
184
|
+
startTime?: string; // opcional, formato HH:mm
|
|
185
|
+
endTime?: string; // opcional, formato HH:mm
|
|
186
|
+
weekDays?: string; // opcional
|
|
187
|
+
capacity?: number; // opcional, mínimo 1
|
|
188
|
+
location?: string; // opcional
|
|
189
|
+
virtualRoomUrl?: string; // opcional, URL
|
|
190
|
+
sessionTemplate?: {
|
|
191
|
+
title: string;
|
|
192
|
+
description?: string;
|
|
193
|
+
location?: string;
|
|
194
|
+
meetingUrl?: string;
|
|
195
|
+
color?: string; // formato #RRGGBB
|
|
196
|
+
recurrence?: {
|
|
197
|
+
frequency: 'daily' | 'weekly' | 'monthly' | 'yearly';
|
|
198
|
+
interval?: number;
|
|
199
|
+
until: string; // ISO8601
|
|
200
|
+
daysOfWeek?: Array<'MO' | 'TU' | 'WE' | 'TH' | 'FR' | 'SA' | 'SU'>;
|
|
201
|
+
};
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
- **EnrollStudentDto**
|
|
207
|
+
|
|
208
|
+
```ts
|
|
209
|
+
{
|
|
210
|
+
personId: number; // obrigatório
|
|
211
|
+
}
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
- **SaveAttendanceDto**
|
|
215
|
+
|
|
216
|
+
```ts
|
|
217
|
+
{
|
|
218
|
+
attendance: Array<{
|
|
219
|
+
studentId: number; // obrigatório
|
|
220
|
+
present: boolean; // obrigatório
|
|
221
|
+
justification?: string; // opcional
|
|
222
|
+
}>;
|
|
223
|
+
}
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
- **CreateCourseDto**
|
|
227
|
+
|
|
228
|
+
```ts
|
|
229
|
+
{
|
|
230
|
+
code?: string; // opcional, max 32
|
|
231
|
+
slug: string; // obrigatório, max 255
|
|
232
|
+
title?: string; // opcional, max 255
|
|
233
|
+
description?: string; // opcional
|
|
234
|
+
requirements?: string; // opcional
|
|
235
|
+
objectives?: string; // opcional
|
|
236
|
+
targetAudience?: string; // opcional
|
|
237
|
+
durationHours?: number; // opcional
|
|
238
|
+
certificateWorkload?: number; // opcional
|
|
239
|
+
level?: 'beginner' | 'intermediate' | 'advanced'; // opcional
|
|
240
|
+
status?: 'draft' | 'published' | 'archived'; // opcional
|
|
241
|
+
offeringType?: 'scheduled' | 'on_demand' | 'blended'; // opcional
|
|
242
|
+
isFeatured?: boolean; // opcional
|
|
243
|
+
hasCertificate?: boolean; // opcional
|
|
244
|
+
isListed?: boolean; // opcional
|
|
245
|
+
primaryColor?: string; // opcional, formato #RRGGBB
|
|
246
|
+
primaryContrastColor?: string; // opcional, formato #RRGGBB
|
|
247
|
+
secondaryColor?: string; // opcional, formato #RRGGBB
|
|
248
|
+
secondaryContrastColor?: string; // opcional, formato #RRGGBB
|
|
249
|
+
categorySlugs?: string[]; // opcional
|
|
250
|
+
instructorIds?: number[]; // opcional
|
|
251
|
+
logoFileId?: number; // opcional
|
|
252
|
+
bannerFileId?: number; // opcional
|
|
253
|
+
}
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
- **CreateCourseStructureLessonDto**
|
|
257
|
+
|
|
258
|
+
```ts
|
|
259
|
+
{
|
|
260
|
+
codigo?: string; // opcional, max 32
|
|
261
|
+
titulo: string; // obrigatório, max 255
|
|
262
|
+
descricaoPublica?: string; // opcional
|
|
263
|
+
descricaoPrivada?: string; // opcional
|
|
264
|
+
tipo: 'video' | 'questao' | 'post' | 'exercicio'; // obrigatório
|
|
265
|
+
duracao: number; // obrigatório, minutos
|
|
266
|
+
videoProvedor?: 'youtube' | 'vimeo' | 'bunny' | 'custom'; // opcional
|
|
267
|
+
videoUrl?: string; // opcional
|
|
268
|
+
duracaoAutomatica?: boolean; // opcional
|
|
269
|
+
transcricao?: string; // opcional
|
|
270
|
+
exameVinculado?: number; // opcional
|
|
271
|
+
conteudoPost?: string; // opcional
|
|
272
|
+
instructorIds?: number[]; // opcional
|
|
273
|
+
recursos?: Array<{
|
|
274
|
+
nome: string; // obrigatório
|
|
275
|
+
fileId?: number; // opcional
|
|
276
|
+
tipo?: string; // opcional
|
|
277
|
+
publico?: boolean; // opcional
|
|
278
|
+
}>;
|
|
279
|
+
}
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
- **CreateSessionDto**
|
|
283
|
+
|
|
284
|
+
```ts
|
|
285
|
+
{
|
|
286
|
+
title: string; // obrigatório, max 255
|
|
287
|
+
description?: string; // opcional
|
|
288
|
+
sessionDate: string; // obrigatório, ISO8601
|
|
289
|
+
startTime: string; // obrigatório, formato HH:mm
|
|
290
|
+
endTime: string; // obrigatório, formato HH:mm
|
|
291
|
+
location?: string; // opcional
|
|
292
|
+
meetingUrl?: string; // opcional, max 500
|
|
293
|
+
color?: string; // opcional, formato #RRGGBB
|
|
294
|
+
status?: 'scheduled' | 'completed' | 'cancelled'; // opcional
|
|
295
|
+
instructorId?: number; // opcional
|
|
296
|
+
recurrence?: {
|
|
297
|
+
frequency: 'daily' | 'weekly' | 'monthly' | 'yearly';
|
|
298
|
+
interval?: number;
|
|
299
|
+
until: string; // ISO8601
|
|
300
|
+
daysOfWeek?: Array<'MO' | 'TU' | 'WE' | 'TH' | 'FR' | 'SA' | 'SU'>;
|
|
301
|
+
}; // opcional
|
|
302
|
+
}
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
- **StartExamAttemptDto**
|
|
306
|
+
|
|
307
|
+
```ts
|
|
308
|
+
{
|
|
309
|
+
studentId?: number; // opcional
|
|
310
|
+
}
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
- **SaveExamAttemptAnswersDto**
|
|
314
|
+
|
|
315
|
+
```ts
|
|
316
|
+
{
|
|
317
|
+
answers: Array<{
|
|
318
|
+
questionId: number;
|
|
319
|
+
examOptionId?: number | null;
|
|
320
|
+
answerText?: string | null;
|
|
321
|
+
matchingPairs?: Array<{
|
|
322
|
+
leftId: string;
|
|
323
|
+
rightId: string;
|
|
324
|
+
}>;
|
|
325
|
+
}>;
|
|
326
|
+
}
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
- **SubmitExamAttemptDto**
|
|
330
|
+
|
|
331
|
+
Extende `SaveExamAttemptAnswersDto` com:
|
|
332
|
+
|
|
333
|
+
```ts
|
|
334
|
+
{
|
|
335
|
+
force?: boolean; // opcional
|
|
336
|
+
}
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
- **CreateEnterpriseDto**
|
|
340
|
+
|
|
341
|
+
```ts
|
|
342
|
+
{
|
|
343
|
+
name: string; // obrigatório, max 255
|
|
344
|
+
slug?: string; // opcional, max 255
|
|
345
|
+
status?: 'active' | 'trial' | 'inactive' | 'suspended'; // opcional
|
|
346
|
+
crmPersonId?: number | null; // opcional
|
|
347
|
+
portalEnabled?: boolean; // opcional
|
|
348
|
+
licenseLimit?: number | null; // opcional
|
|
349
|
+
notes?: string; // opcional
|
|
350
|
+
}
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
- **AddEnterpriseUserDto**
|
|
354
|
+
|
|
355
|
+
```ts
|
|
356
|
+
{
|
|
357
|
+
userId: number; // obrigatório
|
|
358
|
+
personId?: number | null; // opcional
|
|
359
|
+
role: 'student' | 'hr_manager' | 'enterprise_admin' | 'viewer'; // obrigatório
|
|
360
|
+
status?: 'active' | 'inactive' | 'pending'; // opcional
|
|
361
|
+
}
|
|
362
|
+
```
|
|
34
363
|
|
|
35
364
|
## 6. Erros comuns
|
|
36
365
|
|
|
@@ -38,16 +367,23 @@ O módulo `@hed-hog/lms` é responsável pela gestão do sistema de Learning Man
|
|
|
38
367
|
- **Duplicidade de registros únicos:** como códigos únicos de certificado, slugs de cursos ou templates.
|
|
39
368
|
- **Status inválidos:** ao definir valores fora dos enums para status de cursos, exames, matrículas, etc.
|
|
40
369
|
- **Campos obrigatórios ausentes:** como títulos, slugs e chaves primárias.
|
|
370
|
+
- **Datas ou horários inválidos:** datas mal formatadas ou horários inconsistentes (ex: hora fim antes da hora início).
|
|
371
|
+
- **Tentativa de matrícula duplicada:** ao tentar matricular estudante já matriculado ativo.
|
|
372
|
+
- **Arquivo inválido no upload:** ao enviar arquivo não-imagem para upload de background de template.
|
|
373
|
+
- **Entidades não encontradas:** ao referenciar IDs inexistentes (curso, turma, sessão, usuário, etc).
|
|
374
|
+
- **Conflito de código:** ao tentar criar ou atualizar turma com código já existente.
|
|
41
375
|
|
|
42
376
|
## 7. Banco de dados (tabelas YAML)
|
|
43
377
|
|
|
378
|
+
> Abaixo estão as principais tabelas do módulo LMS com suas finalidades e detalhes.
|
|
379
|
+
|
|
44
380
|
### certificate
|
|
45
381
|
|
|
46
382
|
- **Finalidade:** Armazena certificados emitidos para estudantes em cursos, exames, grupos de aulas ou trilhas de aprendizagem.
|
|
47
383
|
- **Colunas:**
|
|
48
384
|
- `id` (PK)
|
|
49
385
|
- `verification_code` (varchar 50, único): código para verificação do certificado.
|
|
50
|
-
- `student_id` (FK para `person.id`, onDelete CASCADE)
|
|
386
|
+
- `student_id` (FK para `person.id`, onDelete CASCADE)
|
|
51
387
|
- `course_enrollment_id` (FK opcional para `course_enrollment.id`, onDelete SET NULL)
|
|
52
388
|
- `course_id` (FK opcional para `course.id`, onDelete SET NULL)
|
|
53
389
|
- `exam_id` (FK opcional para `exam.id`, onDelete SET NULL)
|
|
@@ -64,9 +400,9 @@ O módulo `@hed-hog/lms` é responsável pela gestão do sistema de Learning Man
|
|
|
64
400
|
- `verification_url` (varchar 500, nullable)
|
|
65
401
|
- `pdf_url` (varchar 500, nullable)
|
|
66
402
|
- `created_at`, `updated_at`
|
|
67
|
-
- **Defaults:**
|
|
68
|
-
- **Nulabilidade:**
|
|
69
|
-
- **Integridade:**
|
|
403
|
+
- **Defaults:** timestamps automáticos.
|
|
404
|
+
- **Nulabilidade:** campos opcionais indicados.
|
|
405
|
+
- **Integridade:** chaves estrangeiras com regras onDelete conforme descrito.
|
|
70
406
|
- **Índices:** único em `verification_code`.
|
|
71
407
|
|
|
72
408
|
### certificate_template
|
|
@@ -85,57 +421,6 @@ O módulo `@hed-hog/lms` é responsável pela gestão do sistema de Learning Man
|
|
|
85
421
|
- **Integridade:** -
|
|
86
422
|
- **Índices:** único em `slug`.
|
|
87
423
|
|
|
88
|
-
### course
|
|
89
|
-
|
|
90
|
-
- **Finalidade:** Cursos disponíveis no LMS.
|
|
91
|
-
- **Colunas:**
|
|
92
|
-
- `id` (PK)
|
|
93
|
-
- `title` (varchar 255)
|
|
94
|
-
- `slug` (varchar 255, único)
|
|
95
|
-
- `description` (text, nullable)
|
|
96
|
-
- `short_description` (varchar 500, nullable)
|
|
97
|
-
- `level` (enum: `beginner`, `intermediate`, `advanced`, default `beginner`)
|
|
98
|
-
- `duration_hours` (int, default 0)
|
|
99
|
-
- `status` (enum: `draft`, `published`, `archived`, default `draft`)
|
|
100
|
-
- `primary_color`, `primary_contrast_color`, `secondary_color`, `secondary_contrast_color` (varchar 9, nullable)
|
|
101
|
-
- `certificate_workload` (int, nullable)
|
|
102
|
-
- `certificate_template_id` (FK opcional para `certificate_template.id`, onDelete SET NULL)
|
|
103
|
-
- `requirements`, `objectives`, `target_audience` (text, nullable)
|
|
104
|
-
- `created_at`, `updated_at`
|
|
105
|
-
- **Defaults:** `level` default `beginner`, `duration_hours` default 0, `status` default `draft`.
|
|
106
|
-
- **Nulabilidade:** Campos opcionais indicados.
|
|
107
|
-
- **Integridade:** FK para `certificate_template` com onDelete SET NULL.
|
|
108
|
-
- **Índices:** único em `slug`.
|
|
109
|
-
|
|
110
|
-
### course_category
|
|
111
|
-
|
|
112
|
-
- **Finalidade:** Associação entre cursos e categorias.
|
|
113
|
-
- **Colunas:**
|
|
114
|
-
- `id` (PK)
|
|
115
|
-
- `course_id` (FK para `course.id`, onDelete CASCADE)
|
|
116
|
-
- `category_id` (FK para `category.id`, onDelete CASCADE)
|
|
117
|
-
- `created_at`, `updated_at`
|
|
118
|
-
- **Defaults:** -
|
|
119
|
-
- **Nulabilidade:** -
|
|
120
|
-
- **Integridade:** FK com onDelete CASCADE.
|
|
121
|
-
- **Índices:** único em combinação `course_id` + `category_id`.
|
|
122
|
-
|
|
123
|
-
### course_class_attendance
|
|
124
|
-
|
|
125
|
-
- **Finalidade:** Registro de presença dos estudantes em sessões de aula.
|
|
126
|
-
- **Colunas:**
|
|
127
|
-
- `id` (PK)
|
|
128
|
-
- `course_class_session_id` (FK para `course_class_session.id`, onDelete CASCADE)
|
|
129
|
-
- `student_id` (FK para `person.id`, onDelete CASCADE)
|
|
130
|
-
- `present` (boolean, default false)
|
|
131
|
-
- `justification` (text, nullable)
|
|
132
|
-
- `recorded_by_id` (FK opcional para `person.id`, onDelete SET NULL)
|
|
133
|
-
- `created_at`, `updated_at`
|
|
134
|
-
- **Defaults:** `present` default false.
|
|
135
|
-
- **Nulabilidade:** `justification` e `recorded_by_id` opcionais.
|
|
136
|
-
- **Integridade:** FK com onDelete conforme descrito.
|
|
137
|
-
- **Índices:** único em combinação `course_class_session_id` + `student_id`.
|
|
138
|
-
|
|
139
424
|
### course_class_group
|
|
140
425
|
|
|
141
426
|
- **Finalidade:** Grupos de aulas de um curso.
|
|
@@ -157,7 +442,7 @@ O módulo `@hed-hog/lms` é responsável pela gestão do sistema de Learning Man
|
|
|
157
442
|
- `virtual_room_url` (varchar 500, nullable)
|
|
158
443
|
- `created_at`, `updated_at`
|
|
159
444
|
- **Defaults:** `status` default `open`, `capacity` default 30.
|
|
160
|
-
- **Nulabilidade:**
|
|
445
|
+
- **Nulabilidade:** campos opcionais indicados.
|
|
161
446
|
- **Integridade:** FK com onDelete CASCADE.
|
|
162
447
|
- **Índices:** único em `code`.
|
|
163
448
|
|
|
@@ -175,25 +460,17 @@ O módulo `@hed-hog/lms` é responsável pela gestão do sistema de Learning Man
|
|
|
175
460
|
- `location` (text, nullable)
|
|
176
461
|
- `meeting_url` (varchar 500, nullable)
|
|
177
462
|
- `status` (enum: `scheduled`, `completed`, `cancelled`, default `scheduled`)
|
|
178
|
-
- `
|
|
179
|
-
-
|
|
180
|
-
-
|
|
463
|
+
- `recurrence_id` (uuid, nullable)
|
|
464
|
+
- `recurrence_rule` (text, nullable)
|
|
465
|
+
- `occurrence_index` (int, nullable)
|
|
466
|
+
- `is_exception` (boolean, default false)
|
|
467
|
+
- `parent_session_id` (FK opcional para `course_class_session.id`, onDelete SET NULL)
|
|
468
|
+
- `created_at`, `updated_at`
|
|
469
|
+
- **Defaults:** `status` default `scheduled`, `is_exception` default false.
|
|
470
|
+
- **Nulabilidade:** campos opcionais indicados.
|
|
181
471
|
- **Integridade:** FK com onDelete CASCADE.
|
|
182
472
|
- **Índices:** combinação `course_class_group_id` + `session_date`.
|
|
183
473
|
|
|
184
|
-
### course_class_session_instructor
|
|
185
|
-
|
|
186
|
-
- **Finalidade:** Instrutores vinculados a sessões de aula.
|
|
187
|
-
- **Colunas:**
|
|
188
|
-
- `id` (PK)
|
|
189
|
-
- `course_class_session_id` (FK para `course_class_session.id`, onDelete CASCADE)
|
|
190
|
-
- `instructor_id` (FK para `instructor.id`, onDelete CASCADE)
|
|
191
|
-
- `role` (enum: `lead`, `assistant`, default `assistant`)
|
|
192
|
-
- `created_at`, `updated_at`
|
|
193
|
-
- **Defaults:** `role` default `assistant`.
|
|
194
|
-
- **Integridade:** FK com onDelete CASCADE.
|
|
195
|
-
- **Índices:** único em combinação `course_class_session_id` + `instructor_id`.
|
|
196
|
-
|
|
197
474
|
### course_enrollment
|
|
198
475
|
|
|
199
476
|
- **Finalidade:** Matrículas de pessoas em cursos ou grupos de aula.
|
|
@@ -209,292 +486,30 @@ O módulo `@hed-hog/lms` é responsável pela gestão do sistema de Learning Man
|
|
|
209
486
|
- `final_score` (int, nullable)
|
|
210
487
|
- `created_at`, `updated_at`
|
|
211
488
|
- **Defaults:** `status` default `active`, `progress_percent` default 0.
|
|
212
|
-
- **Nulabilidade:**
|
|
489
|
+
- **Nulabilidade:** campos opcionais indicados.
|
|
213
490
|
- **Integridade:** FK com onDelete conforme descrito.
|
|
214
491
|
- **Índices:** único em combinação `person_id` + `course_class_group_id`.
|
|
215
492
|
|
|
216
|
-
###
|
|
217
|
-
|
|
218
|
-
- **Finalidade:** Imagens associadas a cursos.
|
|
219
|
-
- **Colunas:**
|
|
220
|
-
- `id` (PK)
|
|
221
|
-
- `course_id` (FK para `course.id`, onDelete CASCADE)
|
|
222
|
-
- `file_id` (FK para `file.id`, onDelete CASCADE)
|
|
223
|
-
- `image_type_id` (FK para `image_type.id`, onDelete CASCADE)
|
|
224
|
-
- `order` (int)
|
|
225
|
-
- `is_primary` (boolean, default false)
|
|
226
|
-
- `created_at`, `updated_at`
|
|
227
|
-
- **Defaults:** `is_primary` default false.
|
|
228
|
-
- **Integridade:** FK com onDelete CASCADE.
|
|
229
|
-
- **Índices:** único em combinação `course_id` + `image_type_id` + `order`.
|
|
230
|
-
|
|
231
|
-
### course_lesson
|
|
232
|
-
|
|
233
|
-
- **Finalidade:** Aulas dentro de módulos de curso.
|
|
234
|
-
- **Colunas:**
|
|
235
|
-
- `id` (PK)
|
|
236
|
-
- `course_module_id` (FK para `course_module.id`, onDelete CASCADE)
|
|
237
|
-
- `title` (varchar 255)
|
|
238
|
-
- `description` (text, nullable)
|
|
239
|
-
- `type` (enum: `video`, `text`, `quiz`, default `video`)
|
|
240
|
-
- `content` (text, nullable)
|
|
241
|
-
- `duration_seconds` (int, default 0)
|
|
242
|
-
- `order` (int)
|
|
243
|
-
- `is_released` (boolean, default true)
|
|
244
|
-
- `created_at`, `updated_at`
|
|
245
|
-
- **Defaults:** `type` default `video`, `duration_seconds` default 0, `is_released` default true.
|
|
246
|
-
- **Integridade:** FK com onDelete CASCADE.
|
|
247
|
-
- **Índices:** único em combinação `course_module_id` + `order`.
|
|
248
|
-
|
|
249
|
-
### course_lesson_file
|
|
250
|
-
|
|
251
|
-
- **Finalidade:** Arquivos vinculados a aulas.
|
|
252
|
-
- **Colunas:**
|
|
253
|
-
- `id` (PK)
|
|
254
|
-
- `course_lesson_id` (FK para `course_lesson.id`, onDelete CASCADE)
|
|
255
|
-
- `file_id` (FK opcional para `file.id`, onDelete SET NULL)
|
|
256
|
-
- `title` (varchar 255)
|
|
257
|
-
- `created_at`, `updated_at`
|
|
258
|
-
- **Nulabilidade:** `file_id` opcional.
|
|
259
|
-
- **Integridade:** FK com onDelete conforme descrito.
|
|
260
|
-
- **Índices:** em `course_lesson_id`.
|
|
261
|
-
|
|
262
|
-
### course_lesson_instructor
|
|
263
|
-
|
|
264
|
-
- **Finalidade:** Instrutores vinculados a aulas.
|
|
265
|
-
- **Colunas:**
|
|
266
|
-
- `id` (PK)
|
|
267
|
-
- `course_lesson_id` (FK para `course_lesson.id`, onDelete CASCADE)
|
|
268
|
-
- `instructor_id` (FK para `instructor.id`, onDelete CASCADE)
|
|
269
|
-
- `role` (enum: `lead`, `assistant`, default `assistant`)
|
|
270
|
-
- `created_at`, `updated_at`
|
|
271
|
-
- **Defaults:** `role` default `assistant`.
|
|
272
|
-
- **Integridade:** FK com onDelete CASCADE.
|
|
273
|
-
- **Índices:** único em combinação `course_lesson_id` + `instructor_id`.
|
|
274
|
-
|
|
275
|
-
### course_lesson_progress
|
|
276
|
-
|
|
277
|
-
- **Finalidade:** Progresso dos estudantes em aulas.
|
|
278
|
-
- **Colunas:**
|
|
279
|
-
- `id` (PK)
|
|
280
|
-
- `course_enrollment_id` (FK para `course_enrollment.id`, onDelete CASCADE)
|
|
281
|
-
- `course_lesson_id` (FK para `course_lesson.id`, onDelete CASCADE)
|
|
282
|
-
- `status` (enum: `not_started`, `in_progress`, `completed`, default `not_started`)
|
|
283
|
-
- `progress_percent` (int, default 0)
|
|
284
|
-
- `video_progress_seconds` (int, default 0)
|
|
285
|
-
- `started_at` (datetime, nullable)
|
|
286
|
-
- `completed_at` (datetime, nullable)
|
|
287
|
-
- `time_spent_seconds` (int, default 0)
|
|
288
|
-
- `created_at`, `updated_at`
|
|
289
|
-
- **Defaults:** `status` default `not_started`, `progress_percent` default 0, `video_progress_seconds` default 0, `time_spent_seconds` default 0.
|
|
290
|
-
- **Nulabilidade:** `started_at` e `completed_at` opcionais.
|
|
291
|
-
- **Integridade:** FK com onDelete CASCADE.
|
|
292
|
-
- **Índices:** único em combinação `course_enrollment_id` + `course_lesson_id`.
|
|
293
|
-
|
|
294
|
-
### course_lesson_question
|
|
295
|
-
|
|
296
|
-
- **Finalidade:** Questões associadas a aulas do tipo quiz.
|
|
297
|
-
- **Colunas:**
|
|
298
|
-
- `id` (PK)
|
|
299
|
-
- `course_lesson_id` (FK para `course_lesson.id`, onDelete CASCADE)
|
|
300
|
-
- `question_id` (FK para `question.id`, onDelete CASCADE)
|
|
301
|
-
- `order` (int)
|
|
302
|
-
- `created_at`, `updated_at`
|
|
303
|
-
- **Integridade:** FK com onDelete CASCADE.
|
|
304
|
-
- **Índices:** únicos em combinações `course_lesson_id` + `question_id` e `course_lesson_id` + `order`.
|
|
305
|
-
|
|
306
|
-
### course_module
|
|
307
|
-
|
|
308
|
-
- **Finalidade:** Módulos dentro de cursos.
|
|
309
|
-
- **Colunas:**
|
|
310
|
-
- `id` (PK)
|
|
311
|
-
- `course_id` (FK para `course.id`, onDelete CASCADE)
|
|
312
|
-
- `title` (varchar 255)
|
|
313
|
-
- `description` (text, nullable)
|
|
314
|
-
- `order` (int)
|
|
315
|
-
- `duration_minutes` (int, default 0)
|
|
316
|
-
- `created_at`, `updated_at`
|
|
317
|
-
- **Defaults:** `duration_minutes` default 0.
|
|
318
|
-
- **Integridade:** FK com onDelete CASCADE.
|
|
319
|
-
- **Índices:** único em combinação `course_id` + `order`.
|
|
320
|
-
|
|
321
|
-
### course_prerequisite
|
|
322
|
-
|
|
323
|
-
- **Finalidade:** Pré-requisitos para cursos.
|
|
324
|
-
- **Colunas:**
|
|
325
|
-
- `id` (PK)
|
|
326
|
-
- `course_id` (FK para `course.id`, onDelete CASCADE)
|
|
327
|
-
- `prerequisite_type` (enum: `course`, `learning_path`, `exam`, default `course`)
|
|
328
|
-
- `prerequisite_course_id` (FK opcional para `course.id`, onDelete CASCADE)
|
|
329
|
-
- `prerequisite_learning_path_id` (FK opcional para `learning_path.id`, onDelete CASCADE)
|
|
330
|
-
- `prerequisite_exam_id` (FK opcional para `exam.id`, onDelete CASCADE)
|
|
331
|
-
- `created_at`, `updated_at`
|
|
332
|
-
- **Defaults:** `prerequisite_type` default `course`.
|
|
333
|
-
- **Integridade:** FK com onDelete CASCADE.
|
|
334
|
-
- **Índices:** únicos para combinações de curso e pré-requisitos.
|
|
335
|
-
|
|
336
|
-
### evaluation_rating
|
|
337
|
-
|
|
338
|
-
- **Finalidade:** Avaliações e notas dadas a tópicos de avaliação.
|
|
339
|
-
- **Colunas:**
|
|
340
|
-
- `id` (PK)
|
|
341
|
-
- `evaluation_topic_id` (FK para `evaluation_topic.id`, onDelete CASCADE)
|
|
342
|
-
- `evaluator_id` (FK opcional para `person.id`, onDelete SET NULL)
|
|
343
|
-
- `score` (decimal 2,1)
|
|
344
|
-
- `comment` (text, nullable)
|
|
345
|
-
- `created_at`, `updated_at`
|
|
346
|
-
- **Nulabilidade:** `evaluator_id` e `comment` opcionais.
|
|
347
|
-
- **Integridade:** FK com onDelete conforme descrito.
|
|
348
|
-
- **Índices:** único em combinação `evaluation_topic_id` + `evaluator_id`.
|
|
349
|
-
|
|
350
|
-
### evaluation_topic
|
|
351
|
-
|
|
352
|
-
- **Finalidade:** Tópicos para avaliação dentro do LMS.
|
|
353
|
-
- **Colunas:**
|
|
354
|
-
- `id` (PK)
|
|
355
|
-
- `name` (varchar 255)
|
|
356
|
-
- `description` (text, nullable)
|
|
357
|
-
- `target_type` (enum: `course`, `course_lesson`, `course_class_session`, `question`, `exam`)
|
|
358
|
-
- `course_id` (FK opcional para `course.id`, onDelete SET NULL)
|
|
359
|
-
- `course_lesson_id` (FK opcional para `course_lesson.id`, onDelete SET NULL)
|
|
360
|
-
- `course_class_session_id` (FK opcional para `course_class_session.id`, onDelete SET NULL)
|
|
361
|
-
- `question_id` (FK opcional para `question.id`, onDelete SET NULL)
|
|
362
|
-
- `exam_id` (FK opcional para `exam.id`, onDelete SET NULL)
|
|
363
|
-
- `order` (int)
|
|
364
|
-
- `is_active` (boolean, default true)
|
|
365
|
-
- `created_at`, `updated_at`
|
|
366
|
-
- **Defaults:** `is_active` default true.
|
|
367
|
-
- **Nulabilidade:** Campos opcionais indicados.
|
|
368
|
-
- **Integridade:** FK com onDelete SET NULL.
|
|
369
|
-
- **Índices:** únicos para combinações de alvo e ordem.
|
|
370
|
-
|
|
371
|
-
### exam
|
|
493
|
+
### course
|
|
372
494
|
|
|
373
|
-
- **Finalidade:**
|
|
495
|
+
- **Finalidade:** Cursos disponíveis no LMS.
|
|
374
496
|
- **Colunas:**
|
|
375
497
|
- `id` (PK)
|
|
376
|
-
- `course_id` (FK opcional para `course.id`, onDelete SET NULL)
|
|
377
|
-
- `course_class_group_id` (FK opcional para `course_class_group.id`, onDelete SET NULL)
|
|
378
498
|
- `title` (varchar 255)
|
|
499
|
+
- `slug` (varchar 255, único)
|
|
379
500
|
- `description` (text, nullable)
|
|
380
|
-
- `
|
|
381
|
-
- `
|
|
382
|
-
- `
|
|
501
|
+
- `short_description` (varchar 500, nullable)
|
|
502
|
+
- `level` (enum: `beginner`, `intermediate`, `advanced`, default `beginner`)
|
|
503
|
+
- `duration_hours` (int, default 0)
|
|
504
|
+
- `status` (enum: `draft`, `published`, `archived`, default `draft`)
|
|
383
505
|
- `primary_color`, `primary_contrast_color`, `secondary_color`, `secondary_contrast_color` (varchar 9, nullable)
|
|
384
|
-
- `
|
|
385
|
-
- `
|
|
386
|
-
- `
|
|
387
|
-
- `attempts_allowed` (int, default 1)
|
|
388
|
-
- `min_score` (int, default 60)
|
|
389
|
-
- `max_score` (int, default 100)
|
|
390
|
-
- `shuffle_questions` (boolean, default false)
|
|
391
|
-
- `shuffle_options` (boolean, default false)
|
|
392
|
-
- `show_result` (boolean, default true)
|
|
393
|
-
- `show_answer_key` (boolean, default false)
|
|
394
|
-
- `show_explanation_after_answer` (boolean, default false)
|
|
395
|
-
- `require_all_questions_answered_to_finish` (boolean, default false)
|
|
396
|
-
- `created_at`, `updated_at`
|
|
397
|
-
- **Defaults:** `status` default `draft`, `attempts_allowed` 1, `min_score` 60, `max_score` 100, boolean flags default conforme descrito.
|
|
398
|
-
- **Nulabilidade:** Campos opcionais indicados.
|
|
399
|
-
- **Integridade:** FK com onDelete SET NULL.
|
|
400
|
-
- **Índices:** em `course_id`, `course_class_group_id` e `status`.
|
|
401
|
-
|
|
402
|
-
### exam_answer
|
|
403
|
-
|
|
404
|
-
- **Finalidade:** Respostas dadas em tentativas de exame.
|
|
405
|
-
- **Colunas:**
|
|
406
|
-
- `id` (PK)
|
|
407
|
-
- `exam_attempt_id` (FK para `exam_attempt.id`, onDelete CASCADE)
|
|
408
|
-
- `question_id` (FK para `question.id`, onDelete CASCADE)
|
|
409
|
-
- `exam_option_id` (FK opcional para `exam_option.id`, onDelete SET NULL)
|
|
410
|
-
- `answer_text` (text, nullable)
|
|
411
|
-
- `is_correct` (boolean, nullable)
|
|
412
|
-
- `points_awarded` (int, default 0)
|
|
413
|
-
- `teacher_feedback` (text, nullable)
|
|
414
|
-
- `created_at`, `updated_at`
|
|
415
|
-
- **Defaults:** `points_awarded` default 0.
|
|
416
|
-
- **Nulabilidade:** Campos opcionais indicados.
|
|
417
|
-
- **Integridade:** FK com onDelete conforme descrito.
|
|
418
|
-
- **Índices:** único em combinação `exam_attempt_id` + `question_id`.
|
|
419
|
-
|
|
420
|
-
### exam_attempt
|
|
421
|
-
|
|
422
|
-
- **Finalidade:** Tentativas de realização de exames por estudantes.
|
|
423
|
-
- **Colunas:**
|
|
424
|
-
- `id` (PK)
|
|
425
|
-
- `exam_id` (FK para `exam.id`, onDelete CASCADE)
|
|
426
|
-
- `student_id` (FK para `person.id`, onDelete CASCADE)
|
|
427
|
-
- `course_enrollment_id` (FK opcional para `course_enrollment.id`, onDelete SET NULL)
|
|
428
|
-
- `attempt_number` (int, default 1)
|
|
429
|
-
- `started_at` (datetime)
|
|
430
|
-
- `finished_at` (datetime, nullable)
|
|
431
|
-
- `duration_seconds` (int, nullable)
|
|
432
|
-
- `score` (int, nullable)
|
|
433
|
-
- `status` (enum: `in_progress`, `completed`, `abandoned`, `voided`, default `in_progress`)
|
|
434
|
-
- `ip_address` (varchar 45, nullable)
|
|
435
|
-
- `created_at`, `updated_at`
|
|
436
|
-
- **Defaults:** `attempt_number` default 1, `status` default `in_progress`.
|
|
437
|
-
- **Nulabilidade:** Campos opcionais indicados.
|
|
438
|
-
- **Integridade:** FK com onDelete conforme descrito.
|
|
439
|
-
- **Índices:** único em combinação `exam_id` + `student_id` + `attempt_number`.
|
|
440
|
-
|
|
441
|
-
### exam_image
|
|
442
|
-
|
|
443
|
-
- **Finalidade:** Imagens associadas a exames.
|
|
444
|
-
- **Colunas:**
|
|
445
|
-
- `id` (PK)
|
|
446
|
-
- `exam_id` (FK para `exam.id`, onDelete CASCADE)
|
|
447
|
-
- `file_id` (FK para `file.id`, onDelete CASCADE)
|
|
448
|
-
- `image_type_id` (FK para `image_type.id`, onDelete CASCADE)
|
|
449
|
-
- `order` (int)
|
|
450
|
-
- `is_primary` (boolean, default false)
|
|
451
|
-
- `created_at`, `updated_at`
|
|
452
|
-
- **Defaults:** `is_primary` default false.
|
|
453
|
-
- **Integridade:** FK com onDelete CASCADE.
|
|
454
|
-
- **Índices:** único em combinação `exam_id` + `image_type_id` + `order`.
|
|
455
|
-
|
|
456
|
-
### exam_option
|
|
457
|
-
|
|
458
|
-
- **Finalidade:** Opções de resposta para questões de exame.
|
|
459
|
-
- **Colunas:**
|
|
460
|
-
- `id` (PK)
|
|
461
|
-
- `question_id` (FK para `question.id`, onDelete CASCADE)
|
|
462
|
-
- `option_text` (text)
|
|
463
|
-
- `is_correct` (boolean, default false)
|
|
464
|
-
- `position` (int, default 0)
|
|
465
|
-
- `feedback` (text, nullable)
|
|
466
|
-
- `created_at`, `updated_at`
|
|
467
|
-
- **Defaults:** `is_correct` default false, `position` default 0.
|
|
468
|
-
- **Nulabilidade:** `feedback` opcional.
|
|
469
|
-
- **Integridade:** FK com onDelete CASCADE.
|
|
470
|
-
- **Índices:** único em combinação `question_id` + `position`.
|
|
471
|
-
|
|
472
|
-
### exam_question
|
|
473
|
-
|
|
474
|
-
- **Finalidade:** Questões associadas a exames.
|
|
475
|
-
- **Colunas:**
|
|
476
|
-
- `id` (PK)
|
|
477
|
-
- `exam_id` (FK para `exam.id`, onDelete CASCADE)
|
|
478
|
-
- `question_id` (FK para `question.id`, onDelete CASCADE)
|
|
479
|
-
- `order` (int)
|
|
480
|
-
- `created_at`, `updated_at`
|
|
481
|
-
- **Integridade:** FK com onDelete CASCADE.
|
|
482
|
-
- **Índices:** únicos em combinações `exam_id` + `question_id` e `exam_id` + `order`.
|
|
483
|
-
|
|
484
|
-
### image_type
|
|
485
|
-
|
|
486
|
-
- **Finalidade:** Tipos de imagens aplicáveis a cursos, exames e trilhas.
|
|
487
|
-
- **Colunas:**
|
|
488
|
-
- `id` (PK)
|
|
489
|
-
- `name` (varchar 100)
|
|
490
|
-
- `slug` (varchar 100, único)
|
|
491
|
-
- `applies_to_course` (boolean, default false)
|
|
492
|
-
- `applies_to_exam` (boolean, default false)
|
|
493
|
-
- `applies_to_learning_path` (boolean, default false)
|
|
494
|
-
- `status` (enum: `active`, `inactive`, default `active`)
|
|
506
|
+
- `certificate_workload` (int, nullable)
|
|
507
|
+
- `certificate_template_id` (FK opcional para `certificate_template.id`, onDelete SET NULL)
|
|
508
|
+
- `requirements`, `objectives`, `target_audience` (text, nullable)
|
|
495
509
|
- `created_at`, `updated_at`
|
|
496
|
-
- **Defaults:**
|
|
497
|
-
- **
|
|
510
|
+
- **Defaults:** `level` default `beginner`, `duration_hours` default 0, `status` default `draft`.
|
|
511
|
+
- **Nulabilidade:** campos opcionais indicados.
|
|
512
|
+
- **Integridade:** FK para `certificate_template` com onDelete SET NULL.
|
|
498
513
|
- **Índices:** único em `slug`.
|
|
499
514
|
|
|
500
515
|
### instructor
|
|
@@ -525,7 +540,7 @@ O módulo `@hed-hog/lms` é responsável pela gestão do sistema de Learning Man
|
|
|
525
540
|
- `primary_color`, `primary_contrast_color`, `secondary_color`, `secondary_contrast_color` (varchar 9, nullable)
|
|
526
541
|
- `created_at`, `updated_at`
|
|
527
542
|
- **Defaults:** `level` default `beginner`, `duration_hours` default 0, `status` default `draft`.
|
|
528
|
-
- **Nulabilidade:**
|
|
543
|
+
- **Nulabilidade:** campos opcionais indicados.
|
|
529
544
|
- **Integridade:** -
|
|
530
545
|
- **Índices:** único em `slug`.
|
|
531
546
|
|
|
@@ -546,50 +561,6 @@ O módulo `@hed-hog/lms` é responsável pela gestão do sistema de Learning Man
|
|
|
546
561
|
- **Integridade:** FK com onDelete CASCADE.
|
|
547
562
|
- **Índices:** único em combinação `learning_path_id` + `person_id`.
|
|
548
563
|
|
|
549
|
-
### learning_path_image
|
|
550
|
-
|
|
551
|
-
- **Finalidade:** Imagens associadas a trilhas de aprendizagem.
|
|
552
|
-
- **Colunas:**
|
|
553
|
-
- `id` (PK)
|
|
554
|
-
- `learning_path_id` (FK para `learning_path.id`, onDelete CASCADE)
|
|
555
|
-
- `file_id` (FK para `file.id`, onDelete CASCADE)
|
|
556
|
-
- `image_type_id` (FK para `image_type.id`, onDelete CASCADE)
|
|
557
|
-
- `order` (int)
|
|
558
|
-
- `is_primary` (boolean, default false)
|
|
559
|
-
- `created_at`, `updated_at`
|
|
560
|
-
- **Defaults:** `is_primary` default false.
|
|
561
|
-
- **Integridade:** FK com onDelete CASCADE.
|
|
562
|
-
- **Índices:** único em combinação `learning_path_id` + `image_type_id` + `order`.
|
|
563
|
-
|
|
564
|
-
### learning_path_step
|
|
565
|
-
|
|
566
|
-
- **Finalidade:** Passos dentro de uma trilha, podendo ser cursos ou exames.
|
|
567
|
-
- **Colunas:**
|
|
568
|
-
- `id` (PK)
|
|
569
|
-
- `learning_path_id` (FK para `learning_path.id`, onDelete CASCADE)
|
|
570
|
-
- `step_type` (enum: `course`, `exam`)
|
|
571
|
-
- `course_id` (FK opcional para `course.id`, onDelete CASCADE)
|
|
572
|
-
- `exam_id` (FK opcional para `exam.id`, onDelete CASCADE)
|
|
573
|
-
- `order` (int)
|
|
574
|
-
- `is_required` (boolean, default true)
|
|
575
|
-
- `created_at`, `updated_at`
|
|
576
|
-
- **Defaults:** `is_required` default true.
|
|
577
|
-
- **Integridade:** FK com onDelete CASCADE.
|
|
578
|
-
- **Índices:** únicos para combinações de trilha e ordem, curso ou exame.
|
|
579
|
-
|
|
580
|
-
### question
|
|
581
|
-
|
|
582
|
-
- **Finalidade:** Questões para avaliações e quizzes.
|
|
583
|
-
- **Colunas:**
|
|
584
|
-
- `id` (PK)
|
|
585
|
-
- `question_type` (enum: `multiple_choice`, `true_false`, `essay`, `fill_blank`, `matching`)
|
|
586
|
-
- `statement` (text)
|
|
587
|
-
- `explanation` (text, nullable)
|
|
588
|
-
- `points` (int, default 1)
|
|
589
|
-
- `created_at`, `updated_at`
|
|
590
|
-
- **Defaults:** `points` default 1.
|
|
591
|
-
- **Nulabilidade:** `explanation` opcional.
|
|
592
|
-
|
|
593
564
|
## 8. Regras de negócio relevantes
|
|
594
565
|
|
|
595
566
|
- Certificados são vinculados a estudantes e podem estar associados a diferentes tipos de atividades (curso, exame, grupo de aula, trilha).
|
|
@@ -600,12 +571,21 @@ O módulo `@hed-hog/lms` é responsável pela gestão do sistema de Learning Man
|
|
|
600
571
|
- Trilhas de aprendizagem são compostas por passos ordenados que podem ser cursos ou exames, podendo ser obrigatórios ou opcionais.
|
|
601
572
|
- Progresso em aulas e cursos é monitorado para permitir acompanhamento detalhado do aluno.
|
|
602
573
|
- Imagens e arquivos são organizados por tipo e podem ser marcados como primários para exibição.
|
|
574
|
+
- Turmas possuem capacidade máxima e status que impactam matrículas e ocupação.
|
|
575
|
+
- Sessões podem ser recorrentes com regras de recorrência definidas e exceções.
|
|
576
|
+
- Presença em sessões é registrada individualmente com possibilidade de justificativas.
|
|
577
|
+
- Ao criar ou atualizar templates de certificado, o conteúdo deve ser JSON válido.
|
|
578
|
+
- Slugs de templates são únicos e gerados automaticamente se não fornecidos.
|
|
579
|
+
- Ao matricular estudantes, verifica-se se já existe matrícula ativa para evitar duplicidade.
|
|
580
|
+
- Atualizações em séries de sessões podem ser aplicadas a uma única sessão ou a toda a série.
|
|
581
|
+
- Empresas (enterprises) gerenciam usuários, cursos, turmas e leads com papéis e status específicos.
|
|
582
|
+
- Dashboard agrega dados e estatísticas para monitoramento do LMS.
|
|
603
583
|
|
|
604
584
|
## 9. Guia rápido de uso (exemplos)
|
|
605
585
|
|
|
606
|
-
> Como o módulo
|
|
586
|
+
> Como o módulo é consumido via APIs internas do HedHog, os exemplos abaixo ilustram chamadas típicas usando Prisma ORM.
|
|
607
587
|
|
|
608
|
-
###
|
|
588
|
+
### Criar um novo curso
|
|
609
589
|
|
|
610
590
|
```ts
|
|
611
591
|
const novoCurso = await prisma.course.create({
|
|
@@ -620,12 +600,13 @@ const novoCurso = await prisma.course.create({
|
|
|
620
600
|
});
|
|
621
601
|
```
|
|
622
602
|
|
|
623
|
-
###
|
|
603
|
+
### Matricular um estudante em uma turma
|
|
624
604
|
|
|
625
605
|
```ts
|
|
626
606
|
const matricula = await prisma.course_enrollment.create({
|
|
627
607
|
data: {
|
|
628
608
|
person_id: estudanteId,
|
|
609
|
+
course_class_group_id: turmaId,
|
|
629
610
|
course_id: cursoId,
|
|
630
611
|
status: 'active',
|
|
631
612
|
enrolled_at: new Date(),
|
|
@@ -633,7 +614,7 @@ const matricula = await prisma.course_enrollment.create({
|
|
|
633
614
|
});
|
|
634
615
|
```
|
|
635
616
|
|
|
636
|
-
###
|
|
617
|
+
### Registrar presença em uma sessão de aula
|
|
637
618
|
|
|
638
619
|
```ts
|
|
639
620
|
const presenca = await prisma.course_class_attendance.upsert({
|
|
@@ -652,7 +633,7 @@ const presenca = await prisma.course_class_attendance.upsert({
|
|
|
652
633
|
});
|
|
653
634
|
```
|
|
654
635
|
|
|
655
|
-
###
|
|
636
|
+
### Emitir um certificado
|
|
656
637
|
|
|
657
638
|
```ts
|
|
658
639
|
const certificado = await prisma.certificate.create({
|
|
@@ -674,6 +655,37 @@ const certificado = await prisma.certificate.create({
|
|
|
674
655
|
});
|
|
675
656
|
```
|
|
676
657
|
|
|
658
|
+
### Criar uma turma (class group)
|
|
659
|
+
|
|
660
|
+
```ts
|
|
661
|
+
const turma = await prisma.course_class_group.create({
|
|
662
|
+
data: {
|
|
663
|
+
code: 'TURMA001',
|
|
664
|
+
course_id: cursoId,
|
|
665
|
+
title: 'Turma de Exemplo',
|
|
666
|
+
delivery_mode: 'online',
|
|
667
|
+
status: 'open',
|
|
668
|
+
start_date: new Date('2024-07-01'),
|
|
669
|
+
capacity: 30,
|
|
670
|
+
},
|
|
671
|
+
});
|
|
672
|
+
```
|
|
673
|
+
|
|
674
|
+
### Criar sessão em turma
|
|
675
|
+
|
|
676
|
+
```ts
|
|
677
|
+
const sessao = await prisma.course_class_session.create({
|
|
678
|
+
data: {
|
|
679
|
+
course_class_group_id: turma.id,
|
|
680
|
+
title: 'Sessão 1',
|
|
681
|
+
session_date: new Date('2024-07-02'),
|
|
682
|
+
start_time: '09:00',
|
|
683
|
+
end_time: '11:00',
|
|
684
|
+
status: 'scheduled',
|
|
685
|
+
},
|
|
686
|
+
});
|
|
687
|
+
```
|
|
688
|
+
|
|
677
689
|
---
|
|
678
690
|
|
|
679
691
|
Para mais detalhes sobre integração e uso, consulte a documentação geral do HedHog e os serviços que consomem o módulo `@hed-hog/lms`.
|