@hed-hog/lms 0.0.349 → 0.0.351
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/dist/achievement/achievement.controller.d.ts +62 -0
- package/dist/achievement/achievement.controller.d.ts.map +1 -0
- package/dist/achievement/achievement.controller.js +90 -0
- package/dist/achievement/achievement.controller.js.map +1 -0
- package/dist/achievement/achievement.mcp-tools.d.ts +19 -0
- package/dist/achievement/achievement.mcp-tools.d.ts.map +1 -0
- package/dist/achievement/achievement.mcp-tools.js +157 -0
- package/dist/achievement/achievement.mcp-tools.js.map +1 -0
- package/dist/achievement/achievement.module.d.ts +3 -0
- package/dist/achievement/achievement.module.d.ts.map +1 -0
- package/dist/achievement/achievement.module.js +26 -0
- package/dist/achievement/achievement.module.js.map +1 -0
- package/dist/achievement/achievement.service.d.ts +72 -0
- package/dist/achievement/achievement.service.d.ts.map +1 -0
- package/dist/achievement/achievement.service.js +200 -0
- package/dist/achievement/achievement.service.js.map +1 -0
- package/dist/achievement/dto/create-achievement.dto.d.ts +12 -0
- package/dist/achievement/dto/create-achievement.dto.d.ts.map +1 -0
- package/dist/achievement/dto/create-achievement.dto.js +60 -0
- package/dist/achievement/dto/create-achievement.dto.js.map +1 -0
- package/dist/achievement/dto/update-achievement.dto.d.ts +11 -0
- package/dist/achievement/dto/update-achievement.dto.d.ts.map +1 -0
- package/dist/achievement/dto/update-achievement.dto.js +57 -0
- package/dist/achievement/dto/update-achievement.dto.js.map +1 -0
- package/dist/bitcode-wallet/bitcode-wallet.controller.d.ts +114 -0
- package/dist/bitcode-wallet/bitcode-wallet.controller.d.ts.map +1 -0
- package/dist/bitcode-wallet/bitcode-wallet.controller.js +102 -0
- package/dist/bitcode-wallet/bitcode-wallet.controller.js.map +1 -0
- package/dist/bitcode-wallet/bitcode-wallet.mcp-tools.d.ts +25 -0
- package/dist/bitcode-wallet/bitcode-wallet.mcp-tools.d.ts.map +1 -0
- package/dist/bitcode-wallet/bitcode-wallet.mcp-tools.js +160 -0
- package/dist/bitcode-wallet/bitcode-wallet.mcp-tools.js.map +1 -0
- package/dist/bitcode-wallet/bitcode-wallet.module.d.ts +3 -0
- package/dist/bitcode-wallet/bitcode-wallet.module.d.ts.map +1 -0
- package/dist/bitcode-wallet/bitcode-wallet.module.js +26 -0
- package/dist/bitcode-wallet/bitcode-wallet.module.js.map +1 -0
- package/dist/bitcode-wallet/bitcode-wallet.service.d.ts +127 -0
- package/dist/bitcode-wallet/bitcode-wallet.service.d.ts.map +1 -0
- package/dist/bitcode-wallet/bitcode-wallet.service.js +264 -0
- package/dist/bitcode-wallet/bitcode-wallet.service.js.map +1 -0
- package/dist/bitcode-wallet/dto/create-bitcode-wallet-transaction.dto.d.ts +8 -0
- package/dist/bitcode-wallet/dto/create-bitcode-wallet-transaction.dto.d.ts.map +1 -0
- package/dist/bitcode-wallet/dto/create-bitcode-wallet-transaction.dto.js +33 -0
- package/dist/bitcode-wallet/dto/create-bitcode-wallet-transaction.dto.js.map +1 -0
- package/dist/bitcode-wallet/dto/create-bitcode-wallet.dto.d.ts +4 -0
- package/dist/bitcode-wallet/dto/create-bitcode-wallet.dto.d.ts.map +1 -0
- package/dist/bitcode-wallet/dto/create-bitcode-wallet.dto.js +22 -0
- package/dist/bitcode-wallet/dto/create-bitcode-wallet.dto.js.map +1 -0
- package/dist/bitcode-wallet/dto/update-bitcode-wallet-transaction.dto.d.ts +7 -0
- package/dist/bitcode-wallet/dto/update-bitcode-wallet-transaction.dto.d.ts.map +1 -0
- package/dist/bitcode-wallet/dto/update-bitcode-wallet-transaction.dto.js +35 -0
- package/dist/bitcode-wallet/dto/update-bitcode-wallet-transaction.dto.js.map +1 -0
- package/dist/bitcode-wallet/dto/update-bitcode-wallet.dto.d.ts +4 -0
- package/dist/bitcode-wallet/dto/update-bitcode-wallet.dto.d.ts.map +1 -0
- package/dist/bitcode-wallet/dto/update-bitcode-wallet.dto.js +23 -0
- package/dist/bitcode-wallet/dto/update-bitcode-wallet.dto.js.map +1 -0
- package/dist/certificate/certificate.controller.d.ts +24 -2
- package/dist/certificate/certificate.controller.d.ts.map +1 -1
- package/dist/certificate/certificate.controller.js +20 -6
- package/dist/certificate/certificate.controller.js.map +1 -1
- package/dist/certificate/certificate.mcp-tools.d.ts +24 -0
- package/dist/certificate/certificate.mcp-tools.d.ts.map +1 -0
- package/dist/certificate/certificate.mcp-tools.js +188 -0
- package/dist/certificate/certificate.mcp-tools.js.map +1 -0
- package/dist/certificate/certificate.module.d.ts.map +1 -1
- package/dist/certificate/certificate.module.js +2 -1
- package/dist/certificate/certificate.module.js.map +1 -1
- package/dist/certificate/certificate.service.d.ts +30 -4
- package/dist/certificate/certificate.service.d.ts.map +1 -1
- package/dist/certificate/certificate.service.js +157 -8
- package/dist/certificate/certificate.service.js.map +1 -1
- package/dist/certificate/dto/update-certificate-public-access.dto.d.ts +4 -0
- package/dist/certificate/dto/update-certificate-public-access.dto.d.ts.map +1 -0
- package/dist/certificate/dto/update-certificate-public-access.dto.js +21 -0
- package/dist/certificate/dto/update-certificate-public-access.dto.js.map +1 -0
- package/dist/class-group/class-group.mcp-tools.d.ts +87 -0
- package/dist/class-group/class-group.mcp-tools.d.ts.map +1 -0
- package/dist/class-group/class-group.mcp-tools.js +553 -0
- package/dist/class-group/class-group.mcp-tools.js.map +1 -0
- package/dist/class-group/class-group.module.d.ts.map +1 -1
- package/dist/class-group/class-group.module.js +2 -1
- package/dist/class-group/class-group.module.js.map +1 -1
- package/dist/class-group/class-group.service.d.ts +3 -1
- package/dist/class-group/class-group.service.d.ts.map +1 -1
- package/dist/class-group/class-group.service.js +45 -2
- package/dist/class-group/class-group.service.js.map +1 -1
- package/dist/course/course-operations-integration.service.d.ts +40 -0
- package/dist/course/course-operations-integration.service.d.ts.map +1 -0
- package/dist/course/course-operations-integration.service.js +372 -0
- package/dist/course/course-operations-integration.service.js.map +1 -0
- package/dist/course/course-structure.controller.d.ts +67 -14
- package/dist/course/course-structure.controller.d.ts.map +1 -1
- package/dist/course/course-structure.controller.js +45 -2
- package/dist/course/course-structure.controller.js.map +1 -1
- package/dist/course/course-structure.service.d.ts +58 -9
- package/dist/course/course-structure.service.d.ts.map +1 -1
- package/dist/course/course-structure.service.js +260 -62
- package/dist/course/course-structure.service.js.map +1 -1
- package/dist/course/course-video-conversion.service.d.ts +37 -0
- package/dist/course/course-video-conversion.service.d.ts.map +1 -0
- package/dist/course/course-video-conversion.service.js +308 -0
- package/dist/course/course-video-conversion.service.js.map +1 -0
- package/dist/course/course.controller.d.ts +29 -0
- package/dist/course/course.controller.d.ts.map +1 -1
- package/dist/course/course.controller.js +23 -0
- package/dist/course/course.controller.js.map +1 -1
- package/dist/course/course.mcp-tools.d.ts +90 -0
- package/dist/course/course.mcp-tools.d.ts.map +1 -0
- package/dist/course/course.mcp-tools.js +520 -0
- package/dist/course/course.mcp-tools.js.map +1 -0
- package/dist/course/course.module.d.ts.map +1 -1
- package/dist/course/course.module.js +23 -3
- package/dist/course/course.module.js.map +1 -1
- package/dist/course/course.service.d.ts +30 -1
- package/dist/course/course.service.d.ts.map +1 -1
- package/dist/course/course.service.js +159 -70
- package/dist/course/course.service.js.map +1 -1
- package/dist/course/dto/create-course-structure-lesson.dto.d.ts +5 -1
- package/dist/course/dto/create-course-structure-lesson.dto.d.ts.map +1 -1
- package/dist/course/dto/create-course-structure-lesson.dto.js +16 -2
- package/dist/course/dto/create-course-structure-lesson.dto.js.map +1 -1
- package/dist/course/dto/create-course.dto.d.ts +2 -0
- package/dist/course/dto/create-course.dto.d.ts.map +1 -1
- package/dist/course/dto/create-course.dto.js +16 -0
- package/dist/course/dto/create-course.dto.js.map +1 -1
- package/dist/course/dto/update-course-resources.dto.d.ts +11 -0
- package/dist/course/dto/update-course-resources.dto.d.ts.map +1 -0
- package/dist/course/dto/update-course-resources.dto.js +51 -0
- package/dist/course/dto/update-course-resources.dto.js.map +1 -0
- package/dist/course-lesson-discussion/course-lesson-discussion.controller.d.ts +23 -0
- package/dist/course-lesson-discussion/course-lesson-discussion.controller.d.ts.map +1 -0
- package/dist/course-lesson-discussion/course-lesson-discussion.controller.js +78 -0
- package/dist/course-lesson-discussion/course-lesson-discussion.controller.js.map +1 -0
- package/dist/course-lesson-discussion/course-lesson-discussion.mcp-tools.d.ts +22 -0
- package/dist/course-lesson-discussion/course-lesson-discussion.mcp-tools.d.ts.map +1 -0
- package/dist/course-lesson-discussion/course-lesson-discussion.mcp-tools.js +120 -0
- package/dist/course-lesson-discussion/course-lesson-discussion.mcp-tools.js.map +1 -0
- package/dist/course-lesson-discussion/course-lesson-discussion.module.d.ts +3 -0
- package/dist/course-lesson-discussion/course-lesson-discussion.module.d.ts.map +1 -0
- package/dist/course-lesson-discussion/course-lesson-discussion.module.js +26 -0
- package/dist/course-lesson-discussion/course-lesson-discussion.module.js.map +1 -0
- package/dist/course-lesson-discussion/course-lesson-discussion.service.d.ts +49 -0
- package/dist/course-lesson-discussion/course-lesson-discussion.service.d.ts.map +1 -0
- package/dist/course-lesson-discussion/course-lesson-discussion.service.js +272 -0
- package/dist/course-lesson-discussion/course-lesson-discussion.service.js.map +1 -0
- package/dist/course-lesson-discussion/dto/create-course-lesson-discussion-topic.dto.d.ts +6 -0
- package/dist/course-lesson-discussion/dto/create-course-lesson-discussion-topic.dto.d.ts.map +1 -0
- package/dist/course-lesson-discussion/dto/create-course-lesson-discussion-topic.dto.js +33 -0
- package/dist/course-lesson-discussion/dto/create-course-lesson-discussion-topic.dto.js.map +1 -0
- package/dist/course-lesson-note/course-lesson-note.controller.d.ts +53 -0
- package/dist/course-lesson-note/course-lesson-note.controller.d.ts.map +1 -0
- package/dist/course-lesson-note/course-lesson-note.controller.js +93 -0
- package/dist/course-lesson-note/course-lesson-note.controller.js.map +1 -0
- package/dist/course-lesson-note/course-lesson-note.mcp-tools.d.ts +27 -0
- package/dist/course-lesson-note/course-lesson-note.mcp-tools.d.ts.map +1 -0
- package/dist/course-lesson-note/course-lesson-note.mcp-tools.js +145 -0
- package/dist/course-lesson-note/course-lesson-note.mcp-tools.js.map +1 -0
- package/dist/course-lesson-note/course-lesson-note.module.d.ts +3 -0
- package/dist/course-lesson-note/course-lesson-note.module.d.ts.map +1 -0
- package/dist/course-lesson-note/course-lesson-note.module.js +26 -0
- package/dist/course-lesson-note/course-lesson-note.module.js.map +1 -0
- package/dist/course-lesson-note/course-lesson-note.service.d.ts +59 -0
- package/dist/course-lesson-note/course-lesson-note.service.d.ts.map +1 -0
- package/dist/course-lesson-note/course-lesson-note.service.js +195 -0
- package/dist/course-lesson-note/course-lesson-note.service.js.map +1 -0
- package/dist/course-lesson-note/dto/create-course-lesson-note.dto.d.ts +6 -0
- package/dist/course-lesson-note/dto/create-course-lesson-note.dto.d.ts.map +1 -0
- package/dist/course-lesson-note/dto/create-course-lesson-note.dto.js +33 -0
- package/dist/course-lesson-note/dto/create-course-lesson-note.dto.js.map +1 -0
- package/dist/course-lesson-note/dto/update-course-lesson-note.dto.d.ts +6 -0
- package/dist/course-lesson-note/dto/update-course-lesson-note.dto.d.ts.map +1 -0
- package/dist/course-lesson-note/dto/update-course-lesson-note.dto.js +35 -0
- package/dist/course-lesson-note/dto/update-course-lesson-note.dto.js.map +1 -0
- package/dist/dashboard/dashboard.mcp-tools.d.ts +10 -0
- package/dist/dashboard/dashboard.mcp-tools.d.ts.map +1 -0
- package/dist/dashboard/dashboard.mcp-tools.js +46 -0
- package/dist/dashboard/dashboard.mcp-tools.js.map +1 -0
- package/dist/dashboard/dashboard.module.d.ts.map +1 -1
- package/dist/dashboard/dashboard.module.js +2 -1
- package/dist/dashboard/dashboard.module.js.map +1 -1
- package/dist/enterprise/enterprise.controller.d.ts +3 -3
- package/dist/enterprise/enterprise.controller.d.ts.map +1 -1
- package/dist/enterprise/enterprise.controller.js +0 -1
- package/dist/enterprise/enterprise.controller.js.map +1 -1
- package/dist/enterprise/enterprise.mcp-tools.d.ts +82 -0
- package/dist/enterprise/enterprise.mcp-tools.d.ts.map +1 -0
- package/dist/enterprise/enterprise.mcp-tools.js +516 -0
- package/dist/enterprise/enterprise.mcp-tools.js.map +1 -0
- package/dist/enterprise/enterprise.module.d.ts.map +1 -1
- package/dist/enterprise/enterprise.module.js +2 -1
- package/dist/enterprise/enterprise.module.js.map +1 -1
- package/dist/enterprise/enterprise.service.d.ts +3 -3
- package/dist/enterprise/training/enterprise-training.module.d.ts.map +1 -1
- package/dist/enterprise/training/enterprise-training.module.js +11 -1
- package/dist/enterprise/training/enterprise-training.module.js.map +1 -1
- package/dist/enterprise/training/training-admin.mcp-tools.d.ts +79 -0
- package/dist/enterprise/training/training-admin.mcp-tools.d.ts.map +1 -0
- package/dist/enterprise/training/training-admin.mcp-tools.js +620 -0
- package/dist/enterprise/training/training-admin.mcp-tools.js.map +1 -0
- package/dist/enterprise/training/training-instructor.mcp-tools.d.ts +47 -0
- package/dist/enterprise/training/training-instructor.mcp-tools.d.ts.map +1 -0
- package/dist/enterprise/training/training-instructor.mcp-tools.js +275 -0
- package/dist/enterprise/training/training-instructor.mcp-tools.js.map +1 -0
- package/dist/enterprise/training/training-student.controller.d.ts +24 -0
- package/dist/enterprise/training/training-student.controller.d.ts.map +1 -1
- package/dist/enterprise/training/training-student.controller.js +22 -0
- package/dist/enterprise/training/training-student.controller.js.map +1 -1
- package/dist/enterprise/training/training-student.mcp-tools.d.ts +27 -0
- package/dist/enterprise/training/training-student.mcp-tools.d.ts.map +1 -0
- package/dist/enterprise/training/training-student.mcp-tools.js +186 -0
- package/dist/enterprise/training/training-student.mcp-tools.js.map +1 -0
- package/dist/enterprise/training/training-student.service.d.ts +32 -0
- package/dist/enterprise/training/training-student.service.d.ts.map +1 -1
- package/dist/enterprise/training/training-student.service.js +138 -0
- package/dist/enterprise/training/training-student.service.js.map +1 -1
- package/dist/evaluation/evaluation.mcp-tools.d.ts +25 -0
- package/dist/evaluation/evaluation.mcp-tools.d.ts.map +1 -0
- package/dist/evaluation/evaluation.mcp-tools.js +220 -0
- package/dist/evaluation/evaluation.mcp-tools.js.map +1 -0
- package/dist/evaluation/evaluation.module.d.ts.map +1 -1
- package/dist/evaluation/evaluation.module.js +2 -1
- package/dist/evaluation/evaluation.module.js.map +1 -1
- package/dist/evaluation/evaluation.service.d.ts.map +1 -1
- package/dist/evaluation/evaluation.service.js +9 -2
- package/dist/evaluation/evaluation.service.js.map +1 -1
- package/dist/exam/dto/create-exam-question.dto.d.ts +2 -0
- package/dist/exam/dto/create-exam-question.dto.d.ts.map +1 -1
- package/dist/exam/dto/create-exam-question.dto.js +10 -0
- package/dist/exam/dto/create-exam-question.dto.js.map +1 -1
- package/dist/exam/dto/create-exam.dto.d.ts +2 -0
- package/dist/exam/dto/create-exam.dto.d.ts.map +1 -1
- package/dist/exam/dto/create-exam.dto.js +10 -0
- package/dist/exam/dto/create-exam.dto.js.map +1 -1
- package/dist/exam/dto/create-question-subject.dto.d.ts +5 -0
- package/dist/exam/dto/create-question-subject.dto.d.ts.map +1 -0
- package/dist/exam/dto/create-question-subject.dto.js +28 -0
- package/dist/exam/dto/create-question-subject.dto.js.map +1 -0
- package/dist/exam/exam-attempt.controller.d.ts +4 -0
- package/dist/exam/exam-attempt.controller.d.ts.map +1 -1
- package/dist/exam/exam-attempt.service.d.ts +7 -1
- package/dist/exam/exam-attempt.service.d.ts.map +1 -1
- package/dist/exam/exam-attempt.service.js +47 -17
- package/dist/exam/exam-attempt.service.js.map +1 -1
- package/dist/exam/exam.controller.d.ts +34 -0
- package/dist/exam/exam.controller.d.ts.map +1 -1
- package/dist/exam/exam.controller.js +27 -0
- package/dist/exam/exam.controller.js.map +1 -1
- package/dist/exam/exam.mcp-tools.d.ts +62 -0
- package/dist/exam/exam.mcp-tools.d.ts.map +1 -0
- package/dist/exam/exam.mcp-tools.js +430 -0
- package/dist/exam/exam.mcp-tools.js.map +1 -0
- package/dist/exam/exam.module.d.ts.map +1 -1
- package/dist/exam/exam.module.js +2 -1
- package/dist/exam/exam.module.js.map +1 -1
- package/dist/exam/exam.service.d.ts +38 -0
- package/dist/exam/exam.service.d.ts.map +1 -1
- package/dist/exam/exam.service.js +114 -17
- package/dist/exam/exam.service.js.map +1 -1
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -1
- package/dist/instructor/instructor.mcp-tools.d.ts +41 -0
- package/dist/instructor/instructor.mcp-tools.d.ts.map +1 -0
- package/dist/instructor/instructor.mcp-tools.js +326 -0
- package/dist/instructor/instructor.mcp-tools.js.map +1 -0
- package/dist/instructor/instructor.module.d.ts.map +1 -1
- package/dist/instructor/instructor.module.js +2 -1
- package/dist/instructor/instructor.module.js.map +1 -1
- package/dist/lms.module.d.ts.map +1 -1
- package/dist/lms.module.js +18 -0
- package/dist/lms.module.js.map +1 -1
- package/dist/realtime/lms-realtime.controller.d.ts +7 -0
- package/dist/realtime/lms-realtime.controller.d.ts.map +1 -0
- package/dist/realtime/lms-realtime.controller.js +34 -0
- package/dist/realtime/lms-realtime.controller.js.map +1 -0
- package/dist/realtime/lms-realtime.module.d.ts +3 -0
- package/dist/realtime/lms-realtime.module.d.ts.map +1 -0
- package/dist/realtime/lms-realtime.module.js +25 -0
- package/dist/realtime/lms-realtime.module.js.map +1 -0
- package/dist/realtime/lms-realtime.service.d.ts +36 -0
- package/dist/realtime/lms-realtime.service.d.ts.map +1 -0
- package/dist/realtime/lms-realtime.service.js +59 -0
- package/dist/realtime/lms-realtime.service.js.map +1 -0
- package/dist/realtime/lms-realtime.subscriber.d.ts +10 -0
- package/dist/realtime/lms-realtime.subscriber.d.ts.map +1 -0
- package/dist/realtime/lms-realtime.subscriber.js +70 -0
- package/dist/realtime/lms-realtime.subscriber.js.map +1 -0
- package/dist/reports/reports.mcp-tools.d.ts +10 -0
- package/dist/reports/reports.mcp-tools.d.ts.map +1 -0
- package/dist/reports/reports.mcp-tools.js +50 -0
- package/dist/reports/reports.mcp-tools.js.map +1 -0
- package/dist/reports/reports.module.d.ts.map +1 -1
- package/dist/reports/reports.module.js +2 -1
- package/dist/reports/reports.module.js.map +1 -1
- package/dist/training/training.mcp-tools.d.ts +20 -0
- package/dist/training/training.mcp-tools.d.ts.map +1 -0
- package/dist/training/training.mcp-tools.js +181 -0
- package/dist/training/training.mcp-tools.js.map +1 -0
- package/dist/training/training.module.d.ts.map +1 -1
- package/dist/training/training.module.js +2 -1
- package/dist/training/training.module.js.map +1 -1
- package/dist/video-resolution-profile/dto/create-video-resolution-profile.dto.d.ts +6 -0
- package/dist/video-resolution-profile/dto/create-video-resolution-profile.dto.d.ts.map +1 -0
- package/dist/video-resolution-profile/dto/create-video-resolution-profile.dto.js +33 -0
- package/dist/video-resolution-profile/dto/create-video-resolution-profile.dto.js.map +1 -0
- package/dist/video-resolution-profile/dto/update-video-resolution-profile.dto.d.ts +6 -0
- package/dist/video-resolution-profile/dto/update-video-resolution-profile.dto.d.ts.map +1 -0
- package/dist/video-resolution-profile/dto/update-video-resolution-profile.dto.js +33 -0
- package/dist/video-resolution-profile/dto/update-video-resolution-profile.dto.js.map +1 -0
- package/dist/video-resolution-profile/video-resolution-profile.controller.d.ts +38 -0
- package/dist/video-resolution-profile/video-resolution-profile.controller.d.ts.map +1 -0
- package/dist/video-resolution-profile/video-resolution-profile.controller.js +89 -0
- package/dist/video-resolution-profile/video-resolution-profile.controller.js.map +1 -0
- package/dist/video-resolution-profile/video-resolution-profile.mcp-tools.d.ts +26 -0
- package/dist/video-resolution-profile/video-resolution-profile.mcp-tools.d.ts.map +1 -0
- package/dist/video-resolution-profile/video-resolution-profile.mcp-tools.js +160 -0
- package/dist/video-resolution-profile/video-resolution-profile.mcp-tools.js.map +1 -0
- package/dist/video-resolution-profile/video-resolution-profile.module.d.ts +3 -0
- package/dist/video-resolution-profile/video-resolution-profile.module.d.ts.map +1 -0
- package/dist/video-resolution-profile/video-resolution-profile.module.js +26 -0
- package/dist/video-resolution-profile/video-resolution-profile.module.js.map +1 -0
- package/dist/video-resolution-profile/video-resolution-profile.service.d.ts +45 -0
- package/dist/video-resolution-profile/video-resolution-profile.service.d.ts.map +1 -0
- package/dist/video-resolution-profile/video-resolution-profile.service.js +117 -0
- package/dist/video-resolution-profile/video-resolution-profile.service.js.map +1 -0
- package/hedhog/data/integration_event_catalog.yaml +69 -0
- package/hedhog/data/menu.yaml +51 -0
- package/hedhog/data/route.yaml +2484 -0
- package/hedhog/data/video_resolution_profile.yaml +7 -0
- package/hedhog/frontend/app/_components/class-form-sheet.tsx.ejs +432 -422
- package/hedhog/frontend/app/_components/course-form-sheet.tsx.ejs +200 -67
- package/hedhog/frontend/app/_components/course-picker.tsx.ejs +228 -0
- package/hedhog/frontend/app/_components/create-lms-instructor-sheet.tsx.ejs +7 -4
- package/hedhog/frontend/app/_components/create-lms-person-sheet.tsx.ejs +2 -2
- package/hedhog/frontend/app/_components/create-lms-student-person-sheet.tsx.ejs +2 -2
- package/hedhog/frontend/app/_lib/editor/templateSerializer.ts.ejs +34 -4
- package/hedhog/frontend/app/_lib/editor/types.ts.ejs +28 -3
- package/hedhog/frontend/app/_lib/hooks/use-lms-realtime-refresh.ts.ejs +58 -0
- package/hedhog/frontend/app/achievements/page.tsx.ejs +850 -0
- package/hedhog/frontend/app/bitcodes/page.tsx.ejs +1016 -0
- package/hedhog/frontend/app/certificates/issued/page.tsx.ejs +68 -5
- package/hedhog/frontend/app/certificates/models/CanvasStage.tsx.ejs +29 -8
- package/hedhog/frontend/app/certificates/models/LeftPanel.tsx.ejs +14 -0
- package/hedhog/frontend/app/certificates/models/RightPanel.tsx.ejs +194 -9
- package/hedhog/frontend/app/certificates/models/page.tsx.ejs +15 -5
- package/hedhog/frontend/app/classes/[id]/page.tsx.ejs +16 -5
- package/hedhog/frontend/app/classes/page.tsx.ejs +126 -2105
- package/hedhog/frontend/app/courses/[id]/_components/CourseCertificateCard.tsx.ejs +19 -9
- package/hedhog/frontend/app/courses/[id]/_components/CourseClassificationCard.tsx.ejs +24 -1
- package/hedhog/frontend/app/courses/[id]/_components/CourseContentCard.tsx.ejs +1 -1
- package/hedhog/frontend/app/courses/[id]/_components/CourseMainInfoCard.tsx.ejs +1 -1
- package/hedhog/frontend/app/courses/[id]/_components/CourseRelationsCard.tsx.ejs +51 -11
- package/hedhog/frontend/app/courses/[id]/_components/CourseSectionCard.tsx.ejs +11 -6
- package/hedhog/frontend/app/courses/[id]/_components/CourseSummaryCard.tsx.ejs +7 -4
- package/hedhog/frontend/app/courses/[id]/_components/course-edit-types.ts.ejs +2 -0
- package/hedhog/frontend/app/courses/[id]/page.tsx.ejs +24 -96
- package/hedhog/frontend/app/courses/[id]/structure/_components/course-tree-dnd.tsx.ejs +80 -66
- package/hedhog/frontend/app/courses/[id]/structure/_components/editor-course.tsx.ejs +1286 -230
- package/hedhog/frontend/app/courses/[id]/structure/_components/editor-lesson.tsx.ejs +1334 -153
- package/hedhog/frontend/app/courses/[id]/structure/_components/editor-session.tsx.ejs +11 -11
- package/hedhog/frontend/app/courses/[id]/structure/_components/mock-data.ts.ejs +1 -1
- package/hedhog/frontend/app/courses/[id]/structure/_components/shortcuts-help.tsx.ejs +62 -52
- package/hedhog/frontend/app/courses/[id]/structure/_components/tree-context-menu.tsx.ejs +106 -4
- package/hedhog/frontend/app/courses/[id]/structure/_components/types.ts.ejs +4 -1
- package/hedhog/frontend/app/courses/[id]/structure/_data/adapters/course-structure.adapter.ts.ejs +30 -7
- package/hedhog/frontend/app/courses/[id]/structure/_data/services/course-structure.service.ts.ejs +138 -6
- package/hedhog/frontend/app/courses/[id]/structure/_data/types/api-course.types.ts.ejs +16 -2
- package/hedhog/frontend/app/courses/[id]/structure/_data/use-course-structure-mutations.ts.ejs +1 -0
- package/hedhog/frontend/app/courses/page.tsx.ejs +282 -113
- package/hedhog/frontend/app/enterprise/[id]/page.tsx.ejs +1 -1
- package/hedhog/frontend/app/enterprise/_components/enterprise-admin-create-sheet.tsx.ejs +10 -3
- package/hedhog/frontend/app/enterprise/_components/enterprise-course-create-sheet.tsx.ejs +3 -0
- package/hedhog/frontend/app/enterprise/_components/enterprise-course-edit-sheet.tsx.ejs +7 -0
- package/hedhog/frontend/app/enterprise/_components/enterprise-detail-sheet.tsx.ejs +8 -4
- package/hedhog/frontend/app/enterprise/_components/enterprise-person-edit-sheet.tsx.ejs +2 -2
- package/hedhog/frontend/app/enterprise/_components/enterprise-sheet.tsx.ejs +10 -4
- package/hedhog/frontend/app/enterprise/_components/enterprise-student-create-sheet.tsx.ejs +10 -3
- package/hedhog/frontend/app/enterprise/_components/enterprise-user-create-sheet.tsx.ejs +10 -3
- package/hedhog/frontend/app/evaluations/_components/evaluation-topic-form-sheet.tsx.ejs +10 -3
- package/hedhog/frontend/app/exams/[id]/questions/page.tsx.ejs +186 -5
- package/hedhog/frontend/app/exams/page.tsx.ejs +89 -26
- package/hedhog/frontend/app/instructor-skills/page.tsx.ejs +10 -3
- package/hedhog/frontend/app/instructors/_components/instructor-form-sheet.tsx.ejs +190 -17
- package/hedhog/frontend/app/instructors/page.tsx.ejs +1 -0
- package/hedhog/frontend/app/layout.tsx.ejs +5 -1
- package/hedhog/frontend/app/paths/page.tsx.ejs +19 -29
- package/hedhog/frontend/app/reports/evaluations/page.tsx.ejs +10 -10
- package/hedhog/frontend/app/training/page.tsx.ejs +19 -29
- package/hedhog/frontend/app/video-resolution-profiles/page.tsx.ejs +607 -0
- package/hedhog/frontend/messages/en.json +563 -20
- package/hedhog/frontend/messages/pt.json +563 -20
- package/hedhog/query/triggers.sql +53 -0
- package/hedhog/table/achievement.yaml +46 -0
- package/hedhog/table/bitcode_wallet.yaml +18 -0
- package/hedhog/table/bitcode_wallet_transaction.yaml +22 -0
- package/hedhog/table/certificate.yaml +3 -0
- package/hedhog/table/course.yaml +8 -0
- package/hedhog/table/course_file.yaml +23 -0
- package/hedhog/table/course_lesson.yaml +5 -0
- package/hedhog/table/course_lesson_discussion_like.yaml +21 -0
- package/hedhog/table/course_lesson_discussion_topic.yaml +35 -0
- package/hedhog/table/course_lesson_file.yaml +8 -0
- package/hedhog/table/course_lesson_note.yaml +34 -0
- package/hedhog/table/course_video_resolution_profile.yaml +22 -0
- package/hedhog/table/exam.yaml +5 -0
- package/hedhog/table/learning_path_enrollment.yaml +6 -0
- package/hedhog/table/question.yaml +10 -0
- package/hedhog/table/question_subject.yaml +17 -0
- package/hedhog/table/student_activity_streak.yaml +25 -0
- package/hedhog/table/video_resolution_profile.yaml +18 -0
- package/package.json +8 -7
- package/src/achievement/achievement.controller.ts +60 -0
- package/src/achievement/achievement.mcp-tools.ts +108 -0
- package/src/achievement/achievement.module.ts +13 -0
- package/src/achievement/achievement.service.ts +252 -0
- package/src/achievement/dto/create-achievement.dto.ts +50 -0
- package/src/achievement/dto/update-achievement.dto.ts +47 -0
- package/src/bitcode-wallet/bitcode-wallet.controller.ts +69 -0
- package/src/bitcode-wallet/bitcode-wallet.mcp-tools.ts +107 -0
- package/src/bitcode-wallet/bitcode-wallet.module.ts +13 -0
- package/src/bitcode-wallet/bitcode-wallet.service.ts +361 -0
- package/src/bitcode-wallet/dto/create-bitcode-wallet-transaction.dto.ts +27 -0
- package/src/bitcode-wallet/dto/create-bitcode-wallet.dto.ts +7 -0
- package/src/bitcode-wallet/dto/update-bitcode-wallet-transaction.dto.ts +28 -0
- package/src/bitcode-wallet/dto/update-bitcode-wallet.dto.ts +8 -0
- package/src/certificate/certificate.controller.ts +17 -3
- package/src/certificate/certificate.mcp-tools.ts +131 -0
- package/src/certificate/certificate.module.ts +2 -1
- package/src/certificate/certificate.service.ts +193 -7
- package/src/certificate/dto/update-certificate-public-access.dto.ts +6 -0
- package/src/class-group/class-group.mcp-tools.ts +435 -0
- package/src/class-group/class-group.module.ts +2 -1
- package/src/class-group/class-group.service.ts +51 -1
- package/src/course/course-operations-integration.service.ts +520 -0
- package/src/course/course-structure.controller.ts +46 -10
- package/src/course/course-structure.service.ts +236 -27
- package/src/course/course-video-conversion.service.ts +415 -0
- package/src/course/course.controller.ts +18 -0
- package/src/course/course.mcp-tools.ts +409 -0
- package/src/course/course.module.ts +23 -3
- package/src/course/course.service.ts +178 -29
- package/src/course/dto/create-course-structure-lesson.dto.ts +13 -2
- package/src/course/dto/create-course.dto.ts +16 -0
- package/src/course/dto/update-course-resources.dto.ts +39 -0
- package/src/course-lesson-discussion/course-lesson-discussion.controller.ts +55 -0
- package/src/course-lesson-discussion/course-lesson-discussion.mcp-tools.ts +75 -0
- package/src/course-lesson-discussion/course-lesson-discussion.module.ts +13 -0
- package/src/course-lesson-discussion/course-lesson-discussion.service.ts +354 -0
- package/src/course-lesson-discussion/dto/create-course-lesson-discussion-topic.dto.ts +16 -0
- package/src/course-lesson-note/course-lesson-note.controller.ts +68 -0
- package/src/course-lesson-note/course-lesson-note.mcp-tools.ts +96 -0
- package/src/course-lesson-note/course-lesson-note.module.ts +13 -0
- package/src/course-lesson-note/course-lesson-note.service.ts +248 -0
- package/src/course-lesson-note/dto/create-course-lesson-note.dto.ts +16 -0
- package/src/course-lesson-note/dto/update-course-lesson-note.dto.ts +18 -0
- package/src/dashboard/dashboard.mcp-tools.ts +23 -0
- package/src/dashboard/dashboard.module.ts +2 -1
- package/src/enterprise/enterprise.controller.ts +0 -1
- package/src/enterprise/enterprise.mcp-tools.ts +403 -0
- package/src/enterprise/enterprise.module.ts +2 -1
- package/src/enterprise/training/enterprise-training.module.ts +11 -1
- package/src/enterprise/training/training-admin.mcp-tools.ts +479 -0
- package/src/enterprise/training/training-instructor.mcp-tools.ts +210 -0
- package/src/enterprise/training/training-student.controller.ts +17 -1
- package/src/enterprise/training/training-student.mcp-tools.ts +136 -0
- package/src/enterprise/training/training-student.service.ts +167 -1
- package/src/evaluation/evaluation.mcp-tools.ts +155 -0
- package/src/evaluation/evaluation.module.ts +2 -1
- package/src/evaluation/evaluation.service.ts +9 -2
- package/src/exam/dto/create-exam-question.dto.ts +8 -0
- package/src/exam/dto/create-exam.dto.ts +8 -0
- package/src/exam/dto/create-question-subject.dto.ts +12 -0
- package/src/exam/exam-attempt.service.ts +46 -14
- package/src/exam/exam.controller.ts +19 -0
- package/src/exam/exam.mcp-tools.ts +337 -0
- package/src/exam/exam.module.ts +2 -1
- package/src/exam/exam.service.ts +121 -0
- package/src/index.ts +10 -0
- package/src/instructor/instructor.mcp-tools.ts +243 -0
- package/src/instructor/instructor.module.ts +2 -1
- package/src/lms.module.ts +18 -1
- package/src/realtime/lms-realtime.controller.ts +12 -0
- package/src/realtime/lms-realtime.module.ts +12 -0
- package/src/realtime/lms-realtime.service.ts +98 -0
- package/src/realtime/lms-realtime.subscriber.ts +61 -0
- package/src/reports/reports.mcp-tools.ts +27 -0
- package/src/reports/reports.module.ts +2 -1
- package/src/training/training.mcp-tools.ts +128 -0
- package/src/training/training.module.ts +2 -1
- package/src/video-resolution-profile/dto/create-video-resolution-profile.dto.ts +16 -0
- package/src/video-resolution-profile/dto/update-video-resolution-profile.dto.ts +16 -0
- package/src/video-resolution-profile/video-resolution-profile.controller.ts +62 -0
- package/src/video-resolution-profile/video-resolution-profile.mcp-tools.ts +128 -0
- package/src/video-resolution-profile/video-resolution-profile.module.ts +13 -0
- package/src/video-resolution-profile/video-resolution-profile.service.ts +117 -0
|
@@ -21,12 +21,12 @@ import {
|
|
|
21
21
|
} from '@/components/ui/select';
|
|
22
22
|
import {
|
|
23
23
|
Sheet,
|
|
24
|
-
SheetContent,
|
|
25
24
|
SheetDescription,
|
|
26
25
|
SheetFooter,
|
|
27
26
|
SheetHeader,
|
|
28
27
|
SheetTitle,
|
|
29
28
|
} from '@/components/ui/sheet';
|
|
29
|
+
import { ResizableSheetContent } from '@/components/ui/resizable-sheet-content';
|
|
30
30
|
import { useApp } from '@hed-hog/next-app-provider';
|
|
31
31
|
import { zodResolver } from '@hookform/resolvers/zod';
|
|
32
32
|
import { Eye, EyeOff, Loader2, RefreshCw } from 'lucide-react';
|
|
@@ -165,7 +165,14 @@ export function EnterpriseAdminCreateSheet({
|
|
|
165
165
|
|
|
166
166
|
return (
|
|
167
167
|
<Sheet open={open} onOpenChange={handleOpenChange}>
|
|
168
|
-
<
|
|
168
|
+
<ResizableSheetContent
|
|
169
|
+
sheetId="lms-enterprise-admin-create-sheet"
|
|
170
|
+
defaultWidth={520}
|
|
171
|
+
minWidth={400}
|
|
172
|
+
maxWidth={860}
|
|
173
|
+
side="right"
|
|
174
|
+
className="flex flex-col gap-0 sm:max-w-md"
|
|
175
|
+
>
|
|
169
176
|
<SheetHeader className="border-b px-6 py-4">
|
|
170
177
|
<SheetTitle>New administrator</SheetTitle>
|
|
171
178
|
<SheetDescription>
|
|
@@ -318,7 +325,7 @@ export function EnterpriseAdminCreateSheet({
|
|
|
318
325
|
</SheetFooter>
|
|
319
326
|
</form>
|
|
320
327
|
</Form>
|
|
321
|
-
</
|
|
328
|
+
</ResizableSheetContent>
|
|
322
329
|
</Sheet>
|
|
323
330
|
);
|
|
324
331
|
}
|
|
@@ -143,6 +143,9 @@ export function EnterpriseCourseCreateSheet({
|
|
|
143
143
|
primaryContrastColor: getContrastColor(data.primaryColor),
|
|
144
144
|
secondaryColor: data.secondaryColor,
|
|
145
145
|
secondaryContrastColor: getContrastColor(data.secondaryColor),
|
|
146
|
+
operationsProjectId: data.operationsProjectId
|
|
147
|
+
? Number(data.operationsProjectId)
|
|
148
|
+
: null,
|
|
146
149
|
};
|
|
147
150
|
|
|
148
151
|
const response = await request<ApiCreatedCourse>({
|
|
@@ -36,6 +36,7 @@ type ApiCourse = {
|
|
|
36
36
|
primaryColor?: string | null;
|
|
37
37
|
secondaryColor?: string | null;
|
|
38
38
|
logoFileId?: number | null;
|
|
39
|
+
operationsProjectId?: number | null;
|
|
39
40
|
};
|
|
40
41
|
|
|
41
42
|
export interface EnterpriseCourseEditSheetProps {
|
|
@@ -128,6 +129,9 @@ export function EnterpriseCourseEditSheet({
|
|
|
128
129
|
nivel: toPtLevel(course.level),
|
|
129
130
|
status: toPtStatus(course.status),
|
|
130
131
|
categorias: course.categories ?? [],
|
|
132
|
+
operationsProjectId: course.operationsProjectId
|
|
133
|
+
? String(course.operationsProjectId)
|
|
134
|
+
: '',
|
|
131
135
|
primaryColor: course.primaryColor ?? '#1D4ED8',
|
|
132
136
|
secondaryColor: course.secondaryColor ?? '#111827',
|
|
133
137
|
logoFileId: course.logoFileId ?? null,
|
|
@@ -171,6 +175,9 @@ export function EnterpriseCourseEditSheet({
|
|
|
171
175
|
primaryContrastColor: getContrastColor(values.primaryColor),
|
|
172
176
|
secondaryColor: values.secondaryColor,
|
|
173
177
|
secondaryContrastColor: getContrastColor(values.secondaryColor),
|
|
178
|
+
operationsProjectId: values.operationsProjectId
|
|
179
|
+
? Number(values.operationsProjectId)
|
|
180
|
+
: null,
|
|
174
181
|
logoFileId: values.logoFileId ?? null,
|
|
175
182
|
},
|
|
176
183
|
});
|
|
@@ -17,11 +17,11 @@ import { Input } from '@/components/ui/input';
|
|
|
17
17
|
import { KpiCardsGrid, type KpiCardItem } from '@/components/ui/kpi-cards-grid';
|
|
18
18
|
import {
|
|
19
19
|
Sheet,
|
|
20
|
-
SheetContent,
|
|
21
20
|
SheetDescription,
|
|
22
21
|
SheetHeader,
|
|
23
22
|
SheetTitle,
|
|
24
23
|
} from '@/components/ui/sheet';
|
|
24
|
+
import { ResizableSheetContent } from '@/components/ui/resizable-sheet-content';
|
|
25
25
|
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';
|
|
26
26
|
import { useApp } from '@hed-hog/next-app-provider';
|
|
27
27
|
import {
|
|
@@ -274,9 +274,13 @@ export function EnterpriseDetailSheet({
|
|
|
274
274
|
return (
|
|
275
275
|
<>
|
|
276
276
|
<Sheet open={open} onOpenChange={onOpenChange}>
|
|
277
|
-
<
|
|
277
|
+
<ResizableSheetContent
|
|
278
|
+
sheetId="lms-enterprise-detail-sheet"
|
|
279
|
+
defaultWidth={1120}
|
|
280
|
+
minWidth={700}
|
|
281
|
+
maxWidth={1440}
|
|
278
282
|
side="right"
|
|
279
|
-
className="flex w-full flex-col gap-0 overflow-y-auto p-0
|
|
283
|
+
className="flex w-full flex-col gap-0 overflow-y-auto p-0"
|
|
280
284
|
>
|
|
281
285
|
{currentAccount && (
|
|
282
286
|
<>
|
|
@@ -612,7 +616,7 @@ export function EnterpriseDetailSheet({
|
|
|
612
616
|
</div>
|
|
613
617
|
</>
|
|
614
618
|
)}
|
|
615
|
-
</
|
|
619
|
+
</ResizableSheetContent>
|
|
616
620
|
</Sheet>
|
|
617
621
|
|
|
618
622
|
{/* ── Delete Confirmation Dialog ── */}
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
import { useApp, useQuery } from '@hed-hog/next-app-provider';
|
|
4
4
|
import { useMemo } from 'react';
|
|
5
|
-
import { PersonFormSheet } from '../../../
|
|
5
|
+
import { PersonFormSheet } from '../../../crm/person/_components/person-form-sheet';
|
|
6
6
|
import type {
|
|
7
7
|
ContactTypeOption,
|
|
8
8
|
DocumentTypeOption,
|
|
9
9
|
Person,
|
|
10
|
-
} from '../../../
|
|
10
|
+
} from '../../../crm/person/_components/person-types';
|
|
11
11
|
|
|
12
12
|
export interface EnterprisePersonEditSheetProps {
|
|
13
13
|
open: boolean;
|
|
@@ -20,11 +20,11 @@ import {
|
|
|
20
20
|
} from '@/components/ui/select';
|
|
21
21
|
import {
|
|
22
22
|
Sheet,
|
|
23
|
-
SheetContent,
|
|
24
23
|
SheetDescription,
|
|
25
24
|
SheetHeader,
|
|
26
25
|
SheetTitle,
|
|
27
26
|
} from '@/components/ui/sheet';
|
|
27
|
+
import { ResizableSheetContent } from '@/components/ui/resizable-sheet-content';
|
|
28
28
|
import { Switch } from '@/components/ui/switch';
|
|
29
29
|
import { Textarea } from '@/components/ui/textarea';
|
|
30
30
|
import { useApp } from '@hed-hog/next-app-provider';
|
|
@@ -34,7 +34,7 @@ import { useEffect, useState } from 'react';
|
|
|
34
34
|
import { useForm } from 'react-hook-form';
|
|
35
35
|
import { toast } from 'sonner';
|
|
36
36
|
import { z } from 'zod';
|
|
37
|
-
import { PersonPicker } from '../../../
|
|
37
|
+
import { PersonPicker } from '../../../crm/_components/person-picker';
|
|
38
38
|
import { EnterprisePersonEditSheet } from './enterprise-person-edit-sheet';
|
|
39
39
|
import type { EnterpriseAccount } from './enterprise-types';
|
|
40
40
|
|
|
@@ -187,7 +187,13 @@ export function EnterpriseSheet({
|
|
|
187
187
|
|
|
188
188
|
return (
|
|
189
189
|
<Sheet open={open} onOpenChange={onOpenChange}>
|
|
190
|
-
<
|
|
190
|
+
<ResizableSheetContent
|
|
191
|
+
sheetId="lms-enterprise-account-sheet"
|
|
192
|
+
defaultWidth={560}
|
|
193
|
+
minWidth={420}
|
|
194
|
+
maxWidth={920}
|
|
195
|
+
className="w-full overflow-y-auto sm:max-w-lg"
|
|
196
|
+
>
|
|
191
197
|
<SheetHeader>
|
|
192
198
|
<SheetTitle>
|
|
193
199
|
{isEditing ? t('editTitle') : t('createTitle')}
|
|
@@ -414,7 +420,7 @@ export function EnterpriseSheet({
|
|
|
414
420
|
setSelectedCompanyLabel(person.name ?? '');
|
|
415
421
|
}}
|
|
416
422
|
/>
|
|
417
|
-
</
|
|
423
|
+
</ResizableSheetContent>
|
|
418
424
|
</Sheet>
|
|
419
425
|
);
|
|
420
426
|
}
|
|
@@ -13,12 +13,12 @@ import {
|
|
|
13
13
|
import { Input } from '@/components/ui/input';
|
|
14
14
|
import {
|
|
15
15
|
Sheet,
|
|
16
|
-
SheetContent,
|
|
17
16
|
SheetDescription,
|
|
18
17
|
SheetFooter,
|
|
19
18
|
SheetHeader,
|
|
20
19
|
SheetTitle,
|
|
21
20
|
} from '@/components/ui/sheet';
|
|
21
|
+
import { ResizableSheetContent } from '@/components/ui/resizable-sheet-content';
|
|
22
22
|
import { useApp } from '@hed-hog/next-app-provider';
|
|
23
23
|
import { zodResolver } from '@hookform/resolvers/zod';
|
|
24
24
|
import { Loader2 } from 'lucide-react';
|
|
@@ -101,7 +101,14 @@ export function EnterpriseStudentCreateSheet({
|
|
|
101
101
|
|
|
102
102
|
return (
|
|
103
103
|
<Sheet open={open} onOpenChange={handleOpenChange}>
|
|
104
|
-
<
|
|
104
|
+
<ResizableSheetContent
|
|
105
|
+
sheetId="lms-enterprise-student-create-sheet"
|
|
106
|
+
defaultWidth={520}
|
|
107
|
+
minWidth={400}
|
|
108
|
+
maxWidth={860}
|
|
109
|
+
side="right"
|
|
110
|
+
className="flex flex-col gap-0 sm:max-w-md"
|
|
111
|
+
>
|
|
105
112
|
<SheetHeader className="border-b px-6 py-4">
|
|
106
113
|
<SheetTitle>New student (person)</SheetTitle>
|
|
107
114
|
<SheetDescription>
|
|
@@ -167,7 +174,7 @@ export function EnterpriseStudentCreateSheet({
|
|
|
167
174
|
</SheetFooter>
|
|
168
175
|
</form>
|
|
169
176
|
</Form>
|
|
170
|
-
</
|
|
177
|
+
</ResizableSheetContent>
|
|
171
178
|
</Sheet>
|
|
172
179
|
);
|
|
173
180
|
}
|
|
@@ -20,12 +20,12 @@ import {
|
|
|
20
20
|
} from '@/components/ui/select';
|
|
21
21
|
import {
|
|
22
22
|
Sheet,
|
|
23
|
-
SheetContent,
|
|
24
23
|
SheetDescription,
|
|
25
24
|
SheetFooter,
|
|
26
25
|
SheetHeader,
|
|
27
26
|
SheetTitle,
|
|
28
27
|
} from '@/components/ui/sheet';
|
|
28
|
+
import { ResizableSheetContent } from '@/components/ui/resizable-sheet-content';
|
|
29
29
|
import { zodResolver } from '@hookform/resolvers/zod';
|
|
30
30
|
import { Loader2 } from 'lucide-react';
|
|
31
31
|
import { useEffect } from 'react';
|
|
@@ -104,7 +104,14 @@ export function EnterpriseUserCreateSheet({
|
|
|
104
104
|
|
|
105
105
|
return (
|
|
106
106
|
<Sheet open={open} onOpenChange={handleOpenChange}>
|
|
107
|
-
<
|
|
107
|
+
<ResizableSheetContent
|
|
108
|
+
sheetId="lms-enterprise-user-create-sheet"
|
|
109
|
+
defaultWidth={520}
|
|
110
|
+
minWidth={400}
|
|
111
|
+
maxWidth={860}
|
|
112
|
+
side="right"
|
|
113
|
+
className="flex flex-col gap-0 sm:max-w-md"
|
|
114
|
+
>
|
|
108
115
|
<SheetHeader className="border-b px-6 py-4">
|
|
109
116
|
<SheetTitle>New user</SheetTitle>
|
|
110
117
|
<SheetDescription>
|
|
@@ -205,7 +212,7 @@ export function EnterpriseUserCreateSheet({
|
|
|
205
212
|
</SheetFooter>
|
|
206
213
|
</form>
|
|
207
214
|
</Form>
|
|
208
|
-
</
|
|
215
|
+
</ResizableSheetContent>
|
|
209
216
|
</Sheet>
|
|
210
217
|
);
|
|
211
218
|
}
|
|
@@ -12,11 +12,11 @@ import {
|
|
|
12
12
|
} from '@/components/ui/select';
|
|
13
13
|
import {
|
|
14
14
|
Sheet,
|
|
15
|
-
SheetContent,
|
|
16
15
|
SheetFooter,
|
|
17
16
|
SheetHeader,
|
|
18
17
|
SheetTitle,
|
|
19
18
|
} from '@/components/ui/sheet';
|
|
19
|
+
import { ResizableSheetContent } from '@/components/ui/resizable-sheet-content';
|
|
20
20
|
import { Switch } from '@/components/ui/switch';
|
|
21
21
|
import { Textarea } from '@/components/ui/textarea';
|
|
22
22
|
import { useApp } from '@hed-hog/next-app-provider';
|
|
@@ -106,7 +106,14 @@ export function EvaluationTopicFormSheet({
|
|
|
106
106
|
|
|
107
107
|
return (
|
|
108
108
|
<Sheet open={open} onOpenChange={onOpenChange}>
|
|
109
|
-
<
|
|
109
|
+
<ResizableSheetContent
|
|
110
|
+
sheetId="lms-evaluation-topic-form-sheet"
|
|
111
|
+
defaultWidth={520}
|
|
112
|
+
minWidth={400}
|
|
113
|
+
maxWidth={860}
|
|
114
|
+
side="right"
|
|
115
|
+
className="w-full overflow-y-auto sm:max-w-md"
|
|
116
|
+
>
|
|
110
117
|
<SheetHeader>
|
|
111
118
|
<SheetTitle>
|
|
112
119
|
{editingItem ? t('form.editTitle') : t('form.createTitle')}
|
|
@@ -195,7 +202,7 @@ export function EvaluationTopicFormSheet({
|
|
|
195
202
|
</Button>
|
|
196
203
|
</SheetFooter>
|
|
197
204
|
</form>
|
|
198
|
-
</
|
|
205
|
+
</ResizableSheetContent>
|
|
199
206
|
</Sheet>
|
|
200
207
|
);
|
|
201
208
|
}
|
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
SearchBar,
|
|
9
9
|
ViewModeToggle,
|
|
10
10
|
} from '@/components/entity-list';
|
|
11
|
+
import { EntityPicker } from '@/components/ui/entity-picker';
|
|
11
12
|
import { RichTextEditor } from '@/components/rich-text-editor';
|
|
12
13
|
import { Badge } from '@/components/ui/badge';
|
|
13
14
|
import { Button } from '@/components/ui/button';
|
|
@@ -47,12 +48,12 @@ import {
|
|
|
47
48
|
import { Separator } from '@/components/ui/separator';
|
|
48
49
|
import {
|
|
49
50
|
Sheet,
|
|
50
|
-
SheetContent,
|
|
51
51
|
SheetDescription,
|
|
52
52
|
SheetFooter,
|
|
53
53
|
SheetHeader,
|
|
54
54
|
SheetTitle,
|
|
55
55
|
} from '@/components/ui/sheet';
|
|
56
|
+
import { ResizableSheetContent } from '@/components/ui/resizable-sheet-content';
|
|
56
57
|
import { Skeleton } from '@/components/ui/skeleton';
|
|
57
58
|
import {
|
|
58
59
|
Table,
|
|
@@ -132,13 +133,22 @@ interface Questao {
|
|
|
132
133
|
examQuestionId: number;
|
|
133
134
|
order: number;
|
|
134
135
|
tipo: ExamQuestionType;
|
|
136
|
+
assuntoId: number | null;
|
|
137
|
+
assunto: string | null;
|
|
135
138
|
enunciado: string;
|
|
139
|
+
explicacao: string;
|
|
136
140
|
pontuacao: number;
|
|
137
141
|
alternativas: Alternativa[];
|
|
138
142
|
fillBlankAnswers: FillBlankAnswer[];
|
|
139
143
|
matchingPairs: MatchingPair[];
|
|
140
144
|
}
|
|
141
145
|
|
|
146
|
+
type AssuntoQuestaoOption = {
|
|
147
|
+
id: number;
|
|
148
|
+
name: string;
|
|
149
|
+
description?: string | null;
|
|
150
|
+
};
|
|
151
|
+
|
|
142
152
|
type ExamQuestionType =
|
|
143
153
|
| 'multiple_choice'
|
|
144
154
|
| 'true_false'
|
|
@@ -164,7 +174,10 @@ type ApiExamQuestion = {
|
|
|
164
174
|
examQuestionId: number;
|
|
165
175
|
order: number;
|
|
166
176
|
questionType: ExamQuestionType;
|
|
177
|
+
subjectId: number | null;
|
|
178
|
+
subjectName: string | null;
|
|
167
179
|
statement: string;
|
|
180
|
+
explanation?: string | null;
|
|
168
181
|
points: number;
|
|
169
182
|
alternatives: ApiExamQuestionAlternative[];
|
|
170
183
|
fillBlankAnswers?: Array<{
|
|
@@ -188,8 +201,18 @@ type ApiExamQuestionsResponse = {
|
|
|
188
201
|
data: ApiExamQuestion[];
|
|
189
202
|
};
|
|
190
203
|
|
|
204
|
+
type ApiQuestionSubjectListResponse = {
|
|
205
|
+
data: AssuntoQuestaoOption[];
|
|
206
|
+
total: number;
|
|
207
|
+
page: number;
|
|
208
|
+
pageSize: number;
|
|
209
|
+
lastPage: number;
|
|
210
|
+
};
|
|
211
|
+
|
|
191
212
|
type QuestaoForm = {
|
|
213
|
+
subjectId: number;
|
|
192
214
|
enunciado: string;
|
|
215
|
+
explicacao?: string;
|
|
193
216
|
questionType: ExamQuestionType;
|
|
194
217
|
pontuacao: number;
|
|
195
218
|
};
|
|
@@ -204,7 +227,10 @@ function mapApiQuestion(question: ApiExamQuestion): Questao {
|
|
|
204
227
|
examQuestionId: question.examQuestionId,
|
|
205
228
|
order: question.order,
|
|
206
229
|
tipo: question.questionType,
|
|
230
|
+
assuntoId: question.subjectId,
|
|
231
|
+
assunto: question.subjectName,
|
|
207
232
|
enunciado: question.statement,
|
|
233
|
+
explicacao: question.explanation ?? '',
|
|
208
234
|
pontuacao: question.points,
|
|
209
235
|
alternativas: question.alternatives.map((alternative) => ({
|
|
210
236
|
id: alternative.id,
|
|
@@ -440,6 +466,11 @@ function SortableQuestao({
|
|
|
440
466
|
|
|
441
467
|
<div className="flex items-start justify-between gap-3">
|
|
442
468
|
<div className="mt-2 flex flex-wrap items-center gap-2">
|
|
469
|
+
{questao.assunto && (
|
|
470
|
+
<Badge variant="secondary" className="text-xs">
|
|
471
|
+
{questao.assunto}
|
|
472
|
+
</Badge>
|
|
473
|
+
)}
|
|
443
474
|
<Badge variant="outline" className="text-xs">
|
|
444
475
|
{t(`question.types.${questao.tipo}`)}
|
|
445
476
|
</Badge>
|
|
@@ -588,6 +619,9 @@ export default function QuestoesPage() {
|
|
|
588
619
|
);
|
|
589
620
|
const [deleteDialogOpen, setDeleteDialogOpen] = useState(false);
|
|
590
621
|
const [questaoToDelete, setQuestaoToDelete] = useState<Questao | null>(null);
|
|
622
|
+
const [assuntosLocais, setAssuntosLocais] = useState<AssuntoQuestaoOption[]>(
|
|
623
|
+
[]
|
|
624
|
+
);
|
|
591
625
|
const [hasChanges, setHasChanges] = useState(false);
|
|
592
626
|
const [saving, setSaving] = useState(false);
|
|
593
627
|
const [buscaInput, setBuscaInput] = useState('');
|
|
@@ -608,7 +642,12 @@ export default function QuestoesPage() {
|
|
|
608
642
|
});
|
|
609
643
|
|
|
610
644
|
const questaoSchema = z.object({
|
|
645
|
+
subjectId: z.coerce
|
|
646
|
+
.number()
|
|
647
|
+
.int()
|
|
648
|
+
.min(1, t('sheet.validation.subjectRequired')),
|
|
611
649
|
enunciado: z.string().min(5, t('sheet.validation.statementMin')),
|
|
650
|
+
explicacao: z.string().optional(),
|
|
612
651
|
questionType: z.enum([
|
|
613
652
|
'multiple_choice',
|
|
614
653
|
'true_false',
|
|
@@ -622,7 +661,9 @@ export default function QuestoesPage() {
|
|
|
622
661
|
const form = useForm<QuestaoForm>({
|
|
623
662
|
resolver: zodResolver(questaoSchema),
|
|
624
663
|
defaultValues: {
|
|
664
|
+
subjectId: 0,
|
|
625
665
|
enunciado: '',
|
|
666
|
+
explicacao: '',
|
|
626
667
|
questionType: 'multiple_choice',
|
|
627
668
|
pontuacao: 1,
|
|
628
669
|
},
|
|
@@ -701,6 +742,64 @@ export default function QuestoesPage() {
|
|
|
701
742
|
setCurrentPage(1);
|
|
702
743
|
}
|
|
703
744
|
|
|
745
|
+
async function loadQuestionSubjectOptions(args: {
|
|
746
|
+
page: number;
|
|
747
|
+
pageSize: number;
|
|
748
|
+
search: string;
|
|
749
|
+
}) {
|
|
750
|
+
const response = await request<ApiQuestionSubjectListResponse>({
|
|
751
|
+
url: '/lms/exams/question-subjects',
|
|
752
|
+
method: 'GET',
|
|
753
|
+
params: {
|
|
754
|
+
page: args.page,
|
|
755
|
+
pageSize: args.pageSize,
|
|
756
|
+
...(args.search ? { search: args.search } : {}),
|
|
757
|
+
},
|
|
758
|
+
});
|
|
759
|
+
|
|
760
|
+
const items = response.data?.data ?? [];
|
|
761
|
+
|
|
762
|
+
setAssuntosLocais((prev) => {
|
|
763
|
+
const merged = [...prev, ...items];
|
|
764
|
+
return merged.filter(
|
|
765
|
+
(item, index, arr) =>
|
|
766
|
+
arr.findIndex((candidate) => candidate.id === item.id) === index
|
|
767
|
+
);
|
|
768
|
+
});
|
|
769
|
+
|
|
770
|
+
return {
|
|
771
|
+
items,
|
|
772
|
+
hasMore: (response.data?.page ?? 1) < (response.data?.lastPage ?? 1),
|
|
773
|
+
};
|
|
774
|
+
}
|
|
775
|
+
|
|
776
|
+
async function createQuestionSubject(values: Record<string, string>) {
|
|
777
|
+
const name = values.name?.trim() ?? '';
|
|
778
|
+
|
|
779
|
+
if (!name) {
|
|
780
|
+
toast.error(t('toasts.subjectNameRequired'));
|
|
781
|
+
return null;
|
|
782
|
+
}
|
|
783
|
+
|
|
784
|
+
const response = await request<AssuntoQuestaoOption>({
|
|
785
|
+
url: '/lms/exams/question-subjects',
|
|
786
|
+
method: 'POST',
|
|
787
|
+
data: { name },
|
|
788
|
+
});
|
|
789
|
+
|
|
790
|
+
const created = response.data;
|
|
791
|
+
|
|
792
|
+
if (created?.id) {
|
|
793
|
+
setAssuntosLocais((prev) =>
|
|
794
|
+
prev.some((item) => item.id === created.id) ? prev : [...prev, created]
|
|
795
|
+
);
|
|
796
|
+
toast.success(t('toasts.subjectCreated'));
|
|
797
|
+
return created;
|
|
798
|
+
}
|
|
799
|
+
|
|
800
|
+
return null;
|
|
801
|
+
}
|
|
802
|
+
|
|
704
803
|
useEffect(() => {
|
|
705
804
|
if (currentPage > totalPages) {
|
|
706
805
|
setCurrentPage(totalPages);
|
|
@@ -786,7 +885,9 @@ export default function QuestoesPage() {
|
|
|
786
885
|
function openCreateSheet() {
|
|
787
886
|
setEditingQuestao(null);
|
|
788
887
|
form.reset({
|
|
888
|
+
subjectId: 0,
|
|
789
889
|
enunciado: '',
|
|
890
|
+
explicacao: '',
|
|
790
891
|
questionType: 'multiple_choice',
|
|
791
892
|
pontuacao: 1,
|
|
792
893
|
});
|
|
@@ -802,7 +903,9 @@ export default function QuestoesPage() {
|
|
|
802
903
|
function openEditSheet(questao: Questao) {
|
|
803
904
|
setEditingQuestao(questao);
|
|
804
905
|
form.reset({
|
|
906
|
+
subjectId: questao.assuntoId ?? 0,
|
|
805
907
|
enunciado: questao.enunciado,
|
|
908
|
+
explicacao: questao.explicacao,
|
|
806
909
|
questionType: questao.tipo,
|
|
807
910
|
pontuacao: questao.pontuacao,
|
|
808
911
|
});
|
|
@@ -967,7 +1070,9 @@ export default function QuestoesPage() {
|
|
|
967
1070
|
}
|
|
968
1071
|
|
|
969
1072
|
const payload = {
|
|
1073
|
+
subjectId: data.subjectId,
|
|
970
1074
|
statement: data.enunciado,
|
|
1075
|
+
explanation: data.explicacao?.trim() || null,
|
|
971
1076
|
questionType: data.questionType,
|
|
972
1077
|
points: Math.max(1, Math.round(data.pontuacao)),
|
|
973
1078
|
...(requiresAlternatives && {
|
|
@@ -1033,11 +1138,18 @@ export default function QuestoesPage() {
|
|
|
1033
1138
|
}
|
|
1034
1139
|
|
|
1035
1140
|
async function duplicateQuestao(questao: Questao) {
|
|
1141
|
+
if (!questao.assuntoId) {
|
|
1142
|
+
toast.error(t('toasts.subjectRequiredToDuplicate'));
|
|
1143
|
+
return;
|
|
1144
|
+
}
|
|
1145
|
+
|
|
1036
1146
|
await request({
|
|
1037
|
-
url:
|
|
1147
|
+
url: '/lms/exams/' + examId + '/questions',
|
|
1038
1148
|
method: 'POST',
|
|
1039
1149
|
data: {
|
|
1040
|
-
|
|
1150
|
+
subjectId: questao.assuntoId,
|
|
1151
|
+
statement: questao.enunciado + t('copySuffix'),
|
|
1152
|
+
explanation: questao.explicacao?.trim() || null,
|
|
1041
1153
|
questionType: questao.tipo,
|
|
1042
1154
|
points: Math.max(1, Math.round(questao.pontuacao)),
|
|
1043
1155
|
...(OBJECTIVE_QUESTION_TYPES.includes(questao.tipo) && {
|
|
@@ -1346,6 +1458,7 @@ export default function QuestoesPage() {
|
|
|
1346
1458
|
<TableHeader>
|
|
1347
1459
|
<TableRow>
|
|
1348
1460
|
<TableHead>{t('table.headers.question')}</TableHead>
|
|
1461
|
+
<TableHead>{t('table.headers.subject')}</TableHead>
|
|
1349
1462
|
<TableHead>{t('table.headers.type')}</TableHead>
|
|
1350
1463
|
<TableHead className="text-right">
|
|
1351
1464
|
{t('table.headers.points')}
|
|
@@ -1366,6 +1479,7 @@ export default function QuestoesPage() {
|
|
|
1366
1479
|
</p>
|
|
1367
1480
|
</div>
|
|
1368
1481
|
</TableCell>
|
|
1482
|
+
<TableCell>{questao.assunto ?? '-'}</TableCell>
|
|
1369
1483
|
<TableCell>
|
|
1370
1484
|
<Badge variant="outline" className="text-xs">
|
|
1371
1485
|
{t(`question.types.${questao.tipo}`)}
|
|
@@ -1474,7 +1588,11 @@ export default function QuestoesPage() {
|
|
|
1474
1588
|
|
|
1475
1589
|
{/* Create/Edit Sheet */}
|
|
1476
1590
|
<Sheet open={sheetOpen} onOpenChange={setSheetOpen}>
|
|
1477
|
-
<
|
|
1591
|
+
<ResizableSheetContent
|
|
1592
|
+
sheetId="lms-exam-questions-form-sheet"
|
|
1593
|
+
defaultWidth={560}
|
|
1594
|
+
minWidth={420}
|
|
1595
|
+
maxWidth={920}
|
|
1478
1596
|
side="right"
|
|
1479
1597
|
className="flex w-full flex-col sm:max-w-lg overflow-y-auto"
|
|
1480
1598
|
>
|
|
@@ -1493,6 +1611,51 @@ export default function QuestoesPage() {
|
|
|
1493
1611
|
onSubmit={form.handleSubmit(onSubmit)}
|
|
1494
1612
|
className="flex flex-1 flex-col gap-5 px-4 pb-4"
|
|
1495
1613
|
>
|
|
1614
|
+
<FormField
|
|
1615
|
+
control={form.control}
|
|
1616
|
+
name="subjectId"
|
|
1617
|
+
render={({ field }) => (
|
|
1618
|
+
<FormItem>
|
|
1619
|
+
<FormLabel>{t('sheet.fields.subject')}</FormLabel>
|
|
1620
|
+
<FormControl>
|
|
1621
|
+
<EntityPicker<AssuntoQuestaoOption>
|
|
1622
|
+
value={field.value || null}
|
|
1623
|
+
valueType="number"
|
|
1624
|
+
placeholder={t('sheet.fields.subjectPlaceholder')}
|
|
1625
|
+
searchPlaceholder={t(
|
|
1626
|
+
'sheet.fields.subjectSearchPlaceholder'
|
|
1627
|
+
)}
|
|
1628
|
+
entityLabel={t('sheet.fields.subjectEntityLabel')}
|
|
1629
|
+
noResultsLabel={t('sheet.fields.subjectNoResults')}
|
|
1630
|
+
options={assuntosLocais}
|
|
1631
|
+
loadOptions={loadQuestionSubjectOptions}
|
|
1632
|
+
getOptionLabel={(option) => option.name}
|
|
1633
|
+
getOptionDescription={(option) =>
|
|
1634
|
+
option.description ?? undefined
|
|
1635
|
+
}
|
|
1636
|
+
createTitle={t('sheet.fields.subjectCreateTitle')}
|
|
1637
|
+
createDescription={t(
|
|
1638
|
+
'sheet.fields.subjectCreateDescription'
|
|
1639
|
+
)}
|
|
1640
|
+
createFields={[
|
|
1641
|
+
{
|
|
1642
|
+
name: 'name',
|
|
1643
|
+
label: t('sheet.fields.subjectCreateNameLabel'),
|
|
1644
|
+
placeholder: t(
|
|
1645
|
+
'sheet.fields.subjectCreateNamePlaceholder'
|
|
1646
|
+
),
|
|
1647
|
+
required: true,
|
|
1648
|
+
},
|
|
1649
|
+
]}
|
|
1650
|
+
onCreate={createQuestionSubject}
|
|
1651
|
+
onChange={(value) => field.onChange(Number(value ?? 0))}
|
|
1652
|
+
/>
|
|
1653
|
+
</FormControl>
|
|
1654
|
+
<FormMessage />
|
|
1655
|
+
</FormItem>
|
|
1656
|
+
)}
|
|
1657
|
+
/>
|
|
1658
|
+
|
|
1496
1659
|
<FormField
|
|
1497
1660
|
control={form.control}
|
|
1498
1661
|
name="enunciado"
|
|
@@ -1554,6 +1717,24 @@ export default function QuestoesPage() {
|
|
|
1554
1717
|
)}
|
|
1555
1718
|
/>
|
|
1556
1719
|
|
|
1720
|
+
<FormField
|
|
1721
|
+
control={form.control}
|
|
1722
|
+
name="explicacao"
|
|
1723
|
+
render={({ field }) => (
|
|
1724
|
+
<FormItem>
|
|
1725
|
+
<FormLabel>{t('sheet.fields.explanation')}</FormLabel>
|
|
1726
|
+
<FormControl>
|
|
1727
|
+
<RichTextEditor
|
|
1728
|
+
className="w-full max-w-full h-40"
|
|
1729
|
+
value={field.value ?? ''}
|
|
1730
|
+
onChange={field.onChange}
|
|
1731
|
+
/>
|
|
1732
|
+
</FormControl>
|
|
1733
|
+
<FormMessage />
|
|
1734
|
+
</FormItem>
|
|
1735
|
+
)}
|
|
1736
|
+
/>
|
|
1737
|
+
|
|
1557
1738
|
<FormField
|
|
1558
1739
|
control={form.control}
|
|
1559
1740
|
name="pontuacao"
|
|
@@ -1816,7 +1997,7 @@ export default function QuestoesPage() {
|
|
|
1816
1997
|
</SheetFooter>
|
|
1817
1998
|
</form>
|
|
1818
1999
|
</Form>
|
|
1819
|
-
</
|
|
2000
|
+
</ResizableSheetContent>
|
|
1820
2001
|
</Sheet>
|
|
1821
2002
|
|
|
1822
2003
|
{/* Delete Dialog */}
|