@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.
Files changed (496) hide show
  1. package/dist/achievement/achievement.controller.d.ts +62 -0
  2. package/dist/achievement/achievement.controller.d.ts.map +1 -0
  3. package/dist/achievement/achievement.controller.js +90 -0
  4. package/dist/achievement/achievement.controller.js.map +1 -0
  5. package/dist/achievement/achievement.mcp-tools.d.ts +19 -0
  6. package/dist/achievement/achievement.mcp-tools.d.ts.map +1 -0
  7. package/dist/achievement/achievement.mcp-tools.js +157 -0
  8. package/dist/achievement/achievement.mcp-tools.js.map +1 -0
  9. package/dist/achievement/achievement.module.d.ts +3 -0
  10. package/dist/achievement/achievement.module.d.ts.map +1 -0
  11. package/dist/achievement/achievement.module.js +26 -0
  12. package/dist/achievement/achievement.module.js.map +1 -0
  13. package/dist/achievement/achievement.service.d.ts +72 -0
  14. package/dist/achievement/achievement.service.d.ts.map +1 -0
  15. package/dist/achievement/achievement.service.js +200 -0
  16. package/dist/achievement/achievement.service.js.map +1 -0
  17. package/dist/achievement/dto/create-achievement.dto.d.ts +12 -0
  18. package/dist/achievement/dto/create-achievement.dto.d.ts.map +1 -0
  19. package/dist/achievement/dto/create-achievement.dto.js +60 -0
  20. package/dist/achievement/dto/create-achievement.dto.js.map +1 -0
  21. package/dist/achievement/dto/update-achievement.dto.d.ts +11 -0
  22. package/dist/achievement/dto/update-achievement.dto.d.ts.map +1 -0
  23. package/dist/achievement/dto/update-achievement.dto.js +57 -0
  24. package/dist/achievement/dto/update-achievement.dto.js.map +1 -0
  25. package/dist/bitcode-wallet/bitcode-wallet.controller.d.ts +114 -0
  26. package/dist/bitcode-wallet/bitcode-wallet.controller.d.ts.map +1 -0
  27. package/dist/bitcode-wallet/bitcode-wallet.controller.js +102 -0
  28. package/dist/bitcode-wallet/bitcode-wallet.controller.js.map +1 -0
  29. package/dist/bitcode-wallet/bitcode-wallet.mcp-tools.d.ts +25 -0
  30. package/dist/bitcode-wallet/bitcode-wallet.mcp-tools.d.ts.map +1 -0
  31. package/dist/bitcode-wallet/bitcode-wallet.mcp-tools.js +160 -0
  32. package/dist/bitcode-wallet/bitcode-wallet.mcp-tools.js.map +1 -0
  33. package/dist/bitcode-wallet/bitcode-wallet.module.d.ts +3 -0
  34. package/dist/bitcode-wallet/bitcode-wallet.module.d.ts.map +1 -0
  35. package/dist/bitcode-wallet/bitcode-wallet.module.js +26 -0
  36. package/dist/bitcode-wallet/bitcode-wallet.module.js.map +1 -0
  37. package/dist/bitcode-wallet/bitcode-wallet.service.d.ts +127 -0
  38. package/dist/bitcode-wallet/bitcode-wallet.service.d.ts.map +1 -0
  39. package/dist/bitcode-wallet/bitcode-wallet.service.js +264 -0
  40. package/dist/bitcode-wallet/bitcode-wallet.service.js.map +1 -0
  41. package/dist/bitcode-wallet/dto/create-bitcode-wallet-transaction.dto.d.ts +8 -0
  42. package/dist/bitcode-wallet/dto/create-bitcode-wallet-transaction.dto.d.ts.map +1 -0
  43. package/dist/bitcode-wallet/dto/create-bitcode-wallet-transaction.dto.js +33 -0
  44. package/dist/bitcode-wallet/dto/create-bitcode-wallet-transaction.dto.js.map +1 -0
  45. package/dist/bitcode-wallet/dto/create-bitcode-wallet.dto.d.ts +4 -0
  46. package/dist/bitcode-wallet/dto/create-bitcode-wallet.dto.d.ts.map +1 -0
  47. package/dist/bitcode-wallet/dto/create-bitcode-wallet.dto.js +22 -0
  48. package/dist/bitcode-wallet/dto/create-bitcode-wallet.dto.js.map +1 -0
  49. package/dist/bitcode-wallet/dto/update-bitcode-wallet-transaction.dto.d.ts +7 -0
  50. package/dist/bitcode-wallet/dto/update-bitcode-wallet-transaction.dto.d.ts.map +1 -0
  51. package/dist/bitcode-wallet/dto/update-bitcode-wallet-transaction.dto.js +35 -0
  52. package/dist/bitcode-wallet/dto/update-bitcode-wallet-transaction.dto.js.map +1 -0
  53. package/dist/bitcode-wallet/dto/update-bitcode-wallet.dto.d.ts +4 -0
  54. package/dist/bitcode-wallet/dto/update-bitcode-wallet.dto.d.ts.map +1 -0
  55. package/dist/bitcode-wallet/dto/update-bitcode-wallet.dto.js +23 -0
  56. package/dist/bitcode-wallet/dto/update-bitcode-wallet.dto.js.map +1 -0
  57. package/dist/certificate/certificate.controller.d.ts +24 -2
  58. package/dist/certificate/certificate.controller.d.ts.map +1 -1
  59. package/dist/certificate/certificate.controller.js +20 -6
  60. package/dist/certificate/certificate.controller.js.map +1 -1
  61. package/dist/certificate/certificate.mcp-tools.d.ts +24 -0
  62. package/dist/certificate/certificate.mcp-tools.d.ts.map +1 -0
  63. package/dist/certificate/certificate.mcp-tools.js +188 -0
  64. package/dist/certificate/certificate.mcp-tools.js.map +1 -0
  65. package/dist/certificate/certificate.module.d.ts.map +1 -1
  66. package/dist/certificate/certificate.module.js +2 -1
  67. package/dist/certificate/certificate.module.js.map +1 -1
  68. package/dist/certificate/certificate.service.d.ts +30 -4
  69. package/dist/certificate/certificate.service.d.ts.map +1 -1
  70. package/dist/certificate/certificate.service.js +157 -8
  71. package/dist/certificate/certificate.service.js.map +1 -1
  72. package/dist/certificate/dto/update-certificate-public-access.dto.d.ts +4 -0
  73. package/dist/certificate/dto/update-certificate-public-access.dto.d.ts.map +1 -0
  74. package/dist/certificate/dto/update-certificate-public-access.dto.js +21 -0
  75. package/dist/certificate/dto/update-certificate-public-access.dto.js.map +1 -0
  76. package/dist/class-group/class-group.mcp-tools.d.ts +87 -0
  77. package/dist/class-group/class-group.mcp-tools.d.ts.map +1 -0
  78. package/dist/class-group/class-group.mcp-tools.js +553 -0
  79. package/dist/class-group/class-group.mcp-tools.js.map +1 -0
  80. package/dist/class-group/class-group.module.d.ts.map +1 -1
  81. package/dist/class-group/class-group.module.js +2 -1
  82. package/dist/class-group/class-group.module.js.map +1 -1
  83. package/dist/class-group/class-group.service.d.ts +3 -1
  84. package/dist/class-group/class-group.service.d.ts.map +1 -1
  85. package/dist/class-group/class-group.service.js +45 -2
  86. package/dist/class-group/class-group.service.js.map +1 -1
  87. package/dist/course/course-operations-integration.service.d.ts +40 -0
  88. package/dist/course/course-operations-integration.service.d.ts.map +1 -0
  89. package/dist/course/course-operations-integration.service.js +372 -0
  90. package/dist/course/course-operations-integration.service.js.map +1 -0
  91. package/dist/course/course-structure.controller.d.ts +67 -14
  92. package/dist/course/course-structure.controller.d.ts.map +1 -1
  93. package/dist/course/course-structure.controller.js +45 -2
  94. package/dist/course/course-structure.controller.js.map +1 -1
  95. package/dist/course/course-structure.service.d.ts +58 -9
  96. package/dist/course/course-structure.service.d.ts.map +1 -1
  97. package/dist/course/course-structure.service.js +260 -62
  98. package/dist/course/course-structure.service.js.map +1 -1
  99. package/dist/course/course-video-conversion.service.d.ts +37 -0
  100. package/dist/course/course-video-conversion.service.d.ts.map +1 -0
  101. package/dist/course/course-video-conversion.service.js +308 -0
  102. package/dist/course/course-video-conversion.service.js.map +1 -0
  103. package/dist/course/course.controller.d.ts +29 -0
  104. package/dist/course/course.controller.d.ts.map +1 -1
  105. package/dist/course/course.controller.js +23 -0
  106. package/dist/course/course.controller.js.map +1 -1
  107. package/dist/course/course.mcp-tools.d.ts +90 -0
  108. package/dist/course/course.mcp-tools.d.ts.map +1 -0
  109. package/dist/course/course.mcp-tools.js +520 -0
  110. package/dist/course/course.mcp-tools.js.map +1 -0
  111. package/dist/course/course.module.d.ts.map +1 -1
  112. package/dist/course/course.module.js +23 -3
  113. package/dist/course/course.module.js.map +1 -1
  114. package/dist/course/course.service.d.ts +30 -1
  115. package/dist/course/course.service.d.ts.map +1 -1
  116. package/dist/course/course.service.js +159 -70
  117. package/dist/course/course.service.js.map +1 -1
  118. package/dist/course/dto/create-course-structure-lesson.dto.d.ts +5 -1
  119. package/dist/course/dto/create-course-structure-lesson.dto.d.ts.map +1 -1
  120. package/dist/course/dto/create-course-structure-lesson.dto.js +16 -2
  121. package/dist/course/dto/create-course-structure-lesson.dto.js.map +1 -1
  122. package/dist/course/dto/create-course.dto.d.ts +2 -0
  123. package/dist/course/dto/create-course.dto.d.ts.map +1 -1
  124. package/dist/course/dto/create-course.dto.js +16 -0
  125. package/dist/course/dto/create-course.dto.js.map +1 -1
  126. package/dist/course/dto/update-course-resources.dto.d.ts +11 -0
  127. package/dist/course/dto/update-course-resources.dto.d.ts.map +1 -0
  128. package/dist/course/dto/update-course-resources.dto.js +51 -0
  129. package/dist/course/dto/update-course-resources.dto.js.map +1 -0
  130. package/dist/course-lesson-discussion/course-lesson-discussion.controller.d.ts +23 -0
  131. package/dist/course-lesson-discussion/course-lesson-discussion.controller.d.ts.map +1 -0
  132. package/dist/course-lesson-discussion/course-lesson-discussion.controller.js +78 -0
  133. package/dist/course-lesson-discussion/course-lesson-discussion.controller.js.map +1 -0
  134. package/dist/course-lesson-discussion/course-lesson-discussion.mcp-tools.d.ts +22 -0
  135. package/dist/course-lesson-discussion/course-lesson-discussion.mcp-tools.d.ts.map +1 -0
  136. package/dist/course-lesson-discussion/course-lesson-discussion.mcp-tools.js +120 -0
  137. package/dist/course-lesson-discussion/course-lesson-discussion.mcp-tools.js.map +1 -0
  138. package/dist/course-lesson-discussion/course-lesson-discussion.module.d.ts +3 -0
  139. package/dist/course-lesson-discussion/course-lesson-discussion.module.d.ts.map +1 -0
  140. package/dist/course-lesson-discussion/course-lesson-discussion.module.js +26 -0
  141. package/dist/course-lesson-discussion/course-lesson-discussion.module.js.map +1 -0
  142. package/dist/course-lesson-discussion/course-lesson-discussion.service.d.ts +49 -0
  143. package/dist/course-lesson-discussion/course-lesson-discussion.service.d.ts.map +1 -0
  144. package/dist/course-lesson-discussion/course-lesson-discussion.service.js +272 -0
  145. package/dist/course-lesson-discussion/course-lesson-discussion.service.js.map +1 -0
  146. package/dist/course-lesson-discussion/dto/create-course-lesson-discussion-topic.dto.d.ts +6 -0
  147. package/dist/course-lesson-discussion/dto/create-course-lesson-discussion-topic.dto.d.ts.map +1 -0
  148. package/dist/course-lesson-discussion/dto/create-course-lesson-discussion-topic.dto.js +33 -0
  149. package/dist/course-lesson-discussion/dto/create-course-lesson-discussion-topic.dto.js.map +1 -0
  150. package/dist/course-lesson-note/course-lesson-note.controller.d.ts +53 -0
  151. package/dist/course-lesson-note/course-lesson-note.controller.d.ts.map +1 -0
  152. package/dist/course-lesson-note/course-lesson-note.controller.js +93 -0
  153. package/dist/course-lesson-note/course-lesson-note.controller.js.map +1 -0
  154. package/dist/course-lesson-note/course-lesson-note.mcp-tools.d.ts +27 -0
  155. package/dist/course-lesson-note/course-lesson-note.mcp-tools.d.ts.map +1 -0
  156. package/dist/course-lesson-note/course-lesson-note.mcp-tools.js +145 -0
  157. package/dist/course-lesson-note/course-lesson-note.mcp-tools.js.map +1 -0
  158. package/dist/course-lesson-note/course-lesson-note.module.d.ts +3 -0
  159. package/dist/course-lesson-note/course-lesson-note.module.d.ts.map +1 -0
  160. package/dist/course-lesson-note/course-lesson-note.module.js +26 -0
  161. package/dist/course-lesson-note/course-lesson-note.module.js.map +1 -0
  162. package/dist/course-lesson-note/course-lesson-note.service.d.ts +59 -0
  163. package/dist/course-lesson-note/course-lesson-note.service.d.ts.map +1 -0
  164. package/dist/course-lesson-note/course-lesson-note.service.js +195 -0
  165. package/dist/course-lesson-note/course-lesson-note.service.js.map +1 -0
  166. package/dist/course-lesson-note/dto/create-course-lesson-note.dto.d.ts +6 -0
  167. package/dist/course-lesson-note/dto/create-course-lesson-note.dto.d.ts.map +1 -0
  168. package/dist/course-lesson-note/dto/create-course-lesson-note.dto.js +33 -0
  169. package/dist/course-lesson-note/dto/create-course-lesson-note.dto.js.map +1 -0
  170. package/dist/course-lesson-note/dto/update-course-lesson-note.dto.d.ts +6 -0
  171. package/dist/course-lesson-note/dto/update-course-lesson-note.dto.d.ts.map +1 -0
  172. package/dist/course-lesson-note/dto/update-course-lesson-note.dto.js +35 -0
  173. package/dist/course-lesson-note/dto/update-course-lesson-note.dto.js.map +1 -0
  174. package/dist/dashboard/dashboard.mcp-tools.d.ts +10 -0
  175. package/dist/dashboard/dashboard.mcp-tools.d.ts.map +1 -0
  176. package/dist/dashboard/dashboard.mcp-tools.js +46 -0
  177. package/dist/dashboard/dashboard.mcp-tools.js.map +1 -0
  178. package/dist/dashboard/dashboard.module.d.ts.map +1 -1
  179. package/dist/dashboard/dashboard.module.js +2 -1
  180. package/dist/dashboard/dashboard.module.js.map +1 -1
  181. package/dist/enterprise/enterprise.controller.d.ts +3 -3
  182. package/dist/enterprise/enterprise.controller.d.ts.map +1 -1
  183. package/dist/enterprise/enterprise.controller.js +0 -1
  184. package/dist/enterprise/enterprise.controller.js.map +1 -1
  185. package/dist/enterprise/enterprise.mcp-tools.d.ts +82 -0
  186. package/dist/enterprise/enterprise.mcp-tools.d.ts.map +1 -0
  187. package/dist/enterprise/enterprise.mcp-tools.js +516 -0
  188. package/dist/enterprise/enterprise.mcp-tools.js.map +1 -0
  189. package/dist/enterprise/enterprise.module.d.ts.map +1 -1
  190. package/dist/enterprise/enterprise.module.js +2 -1
  191. package/dist/enterprise/enterprise.module.js.map +1 -1
  192. package/dist/enterprise/enterprise.service.d.ts +3 -3
  193. package/dist/enterprise/training/enterprise-training.module.d.ts.map +1 -1
  194. package/dist/enterprise/training/enterprise-training.module.js +11 -1
  195. package/dist/enterprise/training/enterprise-training.module.js.map +1 -1
  196. package/dist/enterprise/training/training-admin.mcp-tools.d.ts +79 -0
  197. package/dist/enterprise/training/training-admin.mcp-tools.d.ts.map +1 -0
  198. package/dist/enterprise/training/training-admin.mcp-tools.js +620 -0
  199. package/dist/enterprise/training/training-admin.mcp-tools.js.map +1 -0
  200. package/dist/enterprise/training/training-instructor.mcp-tools.d.ts +47 -0
  201. package/dist/enterprise/training/training-instructor.mcp-tools.d.ts.map +1 -0
  202. package/dist/enterprise/training/training-instructor.mcp-tools.js +275 -0
  203. package/dist/enterprise/training/training-instructor.mcp-tools.js.map +1 -0
  204. package/dist/enterprise/training/training-student.controller.d.ts +24 -0
  205. package/dist/enterprise/training/training-student.controller.d.ts.map +1 -1
  206. package/dist/enterprise/training/training-student.controller.js +22 -0
  207. package/dist/enterprise/training/training-student.controller.js.map +1 -1
  208. package/dist/enterprise/training/training-student.mcp-tools.d.ts +27 -0
  209. package/dist/enterprise/training/training-student.mcp-tools.d.ts.map +1 -0
  210. package/dist/enterprise/training/training-student.mcp-tools.js +186 -0
  211. package/dist/enterprise/training/training-student.mcp-tools.js.map +1 -0
  212. package/dist/enterprise/training/training-student.service.d.ts +32 -0
  213. package/dist/enterprise/training/training-student.service.d.ts.map +1 -1
  214. package/dist/enterprise/training/training-student.service.js +138 -0
  215. package/dist/enterprise/training/training-student.service.js.map +1 -1
  216. package/dist/evaluation/evaluation.mcp-tools.d.ts +25 -0
  217. package/dist/evaluation/evaluation.mcp-tools.d.ts.map +1 -0
  218. package/dist/evaluation/evaluation.mcp-tools.js +220 -0
  219. package/dist/evaluation/evaluation.mcp-tools.js.map +1 -0
  220. package/dist/evaluation/evaluation.module.d.ts.map +1 -1
  221. package/dist/evaluation/evaluation.module.js +2 -1
  222. package/dist/evaluation/evaluation.module.js.map +1 -1
  223. package/dist/evaluation/evaluation.service.d.ts.map +1 -1
  224. package/dist/evaluation/evaluation.service.js +9 -2
  225. package/dist/evaluation/evaluation.service.js.map +1 -1
  226. package/dist/exam/dto/create-exam-question.dto.d.ts +2 -0
  227. package/dist/exam/dto/create-exam-question.dto.d.ts.map +1 -1
  228. package/dist/exam/dto/create-exam-question.dto.js +10 -0
  229. package/dist/exam/dto/create-exam-question.dto.js.map +1 -1
  230. package/dist/exam/dto/create-exam.dto.d.ts +2 -0
  231. package/dist/exam/dto/create-exam.dto.d.ts.map +1 -1
  232. package/dist/exam/dto/create-exam.dto.js +10 -0
  233. package/dist/exam/dto/create-exam.dto.js.map +1 -1
  234. package/dist/exam/dto/create-question-subject.dto.d.ts +5 -0
  235. package/dist/exam/dto/create-question-subject.dto.d.ts.map +1 -0
  236. package/dist/exam/dto/create-question-subject.dto.js +28 -0
  237. package/dist/exam/dto/create-question-subject.dto.js.map +1 -0
  238. package/dist/exam/exam-attempt.controller.d.ts +4 -0
  239. package/dist/exam/exam-attempt.controller.d.ts.map +1 -1
  240. package/dist/exam/exam-attempt.service.d.ts +7 -1
  241. package/dist/exam/exam-attempt.service.d.ts.map +1 -1
  242. package/dist/exam/exam-attempt.service.js +47 -17
  243. package/dist/exam/exam-attempt.service.js.map +1 -1
  244. package/dist/exam/exam.controller.d.ts +34 -0
  245. package/dist/exam/exam.controller.d.ts.map +1 -1
  246. package/dist/exam/exam.controller.js +27 -0
  247. package/dist/exam/exam.controller.js.map +1 -1
  248. package/dist/exam/exam.mcp-tools.d.ts +62 -0
  249. package/dist/exam/exam.mcp-tools.d.ts.map +1 -0
  250. package/dist/exam/exam.mcp-tools.js +430 -0
  251. package/dist/exam/exam.mcp-tools.js.map +1 -0
  252. package/dist/exam/exam.module.d.ts.map +1 -1
  253. package/dist/exam/exam.module.js +2 -1
  254. package/dist/exam/exam.module.js.map +1 -1
  255. package/dist/exam/exam.service.d.ts +38 -0
  256. package/dist/exam/exam.service.d.ts.map +1 -1
  257. package/dist/exam/exam.service.js +114 -17
  258. package/dist/exam/exam.service.js.map +1 -1
  259. package/dist/index.d.ts +10 -0
  260. package/dist/index.d.ts.map +1 -1
  261. package/dist/index.js +10 -0
  262. package/dist/index.js.map +1 -1
  263. package/dist/instructor/instructor.mcp-tools.d.ts +41 -0
  264. package/dist/instructor/instructor.mcp-tools.d.ts.map +1 -0
  265. package/dist/instructor/instructor.mcp-tools.js +326 -0
  266. package/dist/instructor/instructor.mcp-tools.js.map +1 -0
  267. package/dist/instructor/instructor.module.d.ts.map +1 -1
  268. package/dist/instructor/instructor.module.js +2 -1
  269. package/dist/instructor/instructor.module.js.map +1 -1
  270. package/dist/lms.module.d.ts.map +1 -1
  271. package/dist/lms.module.js +18 -0
  272. package/dist/lms.module.js.map +1 -1
  273. package/dist/realtime/lms-realtime.controller.d.ts +7 -0
  274. package/dist/realtime/lms-realtime.controller.d.ts.map +1 -0
  275. package/dist/realtime/lms-realtime.controller.js +34 -0
  276. package/dist/realtime/lms-realtime.controller.js.map +1 -0
  277. package/dist/realtime/lms-realtime.module.d.ts +3 -0
  278. package/dist/realtime/lms-realtime.module.d.ts.map +1 -0
  279. package/dist/realtime/lms-realtime.module.js +25 -0
  280. package/dist/realtime/lms-realtime.module.js.map +1 -0
  281. package/dist/realtime/lms-realtime.service.d.ts +36 -0
  282. package/dist/realtime/lms-realtime.service.d.ts.map +1 -0
  283. package/dist/realtime/lms-realtime.service.js +59 -0
  284. package/dist/realtime/lms-realtime.service.js.map +1 -0
  285. package/dist/realtime/lms-realtime.subscriber.d.ts +10 -0
  286. package/dist/realtime/lms-realtime.subscriber.d.ts.map +1 -0
  287. package/dist/realtime/lms-realtime.subscriber.js +70 -0
  288. package/dist/realtime/lms-realtime.subscriber.js.map +1 -0
  289. package/dist/reports/reports.mcp-tools.d.ts +10 -0
  290. package/dist/reports/reports.mcp-tools.d.ts.map +1 -0
  291. package/dist/reports/reports.mcp-tools.js +50 -0
  292. package/dist/reports/reports.mcp-tools.js.map +1 -0
  293. package/dist/reports/reports.module.d.ts.map +1 -1
  294. package/dist/reports/reports.module.js +2 -1
  295. package/dist/reports/reports.module.js.map +1 -1
  296. package/dist/training/training.mcp-tools.d.ts +20 -0
  297. package/dist/training/training.mcp-tools.d.ts.map +1 -0
  298. package/dist/training/training.mcp-tools.js +181 -0
  299. package/dist/training/training.mcp-tools.js.map +1 -0
  300. package/dist/training/training.module.d.ts.map +1 -1
  301. package/dist/training/training.module.js +2 -1
  302. package/dist/training/training.module.js.map +1 -1
  303. package/dist/video-resolution-profile/dto/create-video-resolution-profile.dto.d.ts +6 -0
  304. package/dist/video-resolution-profile/dto/create-video-resolution-profile.dto.d.ts.map +1 -0
  305. package/dist/video-resolution-profile/dto/create-video-resolution-profile.dto.js +33 -0
  306. package/dist/video-resolution-profile/dto/create-video-resolution-profile.dto.js.map +1 -0
  307. package/dist/video-resolution-profile/dto/update-video-resolution-profile.dto.d.ts +6 -0
  308. package/dist/video-resolution-profile/dto/update-video-resolution-profile.dto.d.ts.map +1 -0
  309. package/dist/video-resolution-profile/dto/update-video-resolution-profile.dto.js +33 -0
  310. package/dist/video-resolution-profile/dto/update-video-resolution-profile.dto.js.map +1 -0
  311. package/dist/video-resolution-profile/video-resolution-profile.controller.d.ts +38 -0
  312. package/dist/video-resolution-profile/video-resolution-profile.controller.d.ts.map +1 -0
  313. package/dist/video-resolution-profile/video-resolution-profile.controller.js +89 -0
  314. package/dist/video-resolution-profile/video-resolution-profile.controller.js.map +1 -0
  315. package/dist/video-resolution-profile/video-resolution-profile.mcp-tools.d.ts +26 -0
  316. package/dist/video-resolution-profile/video-resolution-profile.mcp-tools.d.ts.map +1 -0
  317. package/dist/video-resolution-profile/video-resolution-profile.mcp-tools.js +160 -0
  318. package/dist/video-resolution-profile/video-resolution-profile.mcp-tools.js.map +1 -0
  319. package/dist/video-resolution-profile/video-resolution-profile.module.d.ts +3 -0
  320. package/dist/video-resolution-profile/video-resolution-profile.module.d.ts.map +1 -0
  321. package/dist/video-resolution-profile/video-resolution-profile.module.js +26 -0
  322. package/dist/video-resolution-profile/video-resolution-profile.module.js.map +1 -0
  323. package/dist/video-resolution-profile/video-resolution-profile.service.d.ts +45 -0
  324. package/dist/video-resolution-profile/video-resolution-profile.service.d.ts.map +1 -0
  325. package/dist/video-resolution-profile/video-resolution-profile.service.js +117 -0
  326. package/dist/video-resolution-profile/video-resolution-profile.service.js.map +1 -0
  327. package/hedhog/data/integration_event_catalog.yaml +69 -0
  328. package/hedhog/data/menu.yaml +51 -0
  329. package/hedhog/data/route.yaml +2484 -0
  330. package/hedhog/data/video_resolution_profile.yaml +7 -0
  331. package/hedhog/frontend/app/_components/class-form-sheet.tsx.ejs +432 -422
  332. package/hedhog/frontend/app/_components/course-form-sheet.tsx.ejs +200 -67
  333. package/hedhog/frontend/app/_components/course-picker.tsx.ejs +228 -0
  334. package/hedhog/frontend/app/_components/create-lms-instructor-sheet.tsx.ejs +7 -4
  335. package/hedhog/frontend/app/_components/create-lms-person-sheet.tsx.ejs +2 -2
  336. package/hedhog/frontend/app/_components/create-lms-student-person-sheet.tsx.ejs +2 -2
  337. package/hedhog/frontend/app/_lib/editor/templateSerializer.ts.ejs +34 -4
  338. package/hedhog/frontend/app/_lib/editor/types.ts.ejs +28 -3
  339. package/hedhog/frontend/app/_lib/hooks/use-lms-realtime-refresh.ts.ejs +58 -0
  340. package/hedhog/frontend/app/achievements/page.tsx.ejs +850 -0
  341. package/hedhog/frontend/app/bitcodes/page.tsx.ejs +1016 -0
  342. package/hedhog/frontend/app/certificates/issued/page.tsx.ejs +68 -5
  343. package/hedhog/frontend/app/certificates/models/CanvasStage.tsx.ejs +29 -8
  344. package/hedhog/frontend/app/certificates/models/LeftPanel.tsx.ejs +14 -0
  345. package/hedhog/frontend/app/certificates/models/RightPanel.tsx.ejs +194 -9
  346. package/hedhog/frontend/app/certificates/models/page.tsx.ejs +15 -5
  347. package/hedhog/frontend/app/classes/[id]/page.tsx.ejs +16 -5
  348. package/hedhog/frontend/app/classes/page.tsx.ejs +126 -2105
  349. package/hedhog/frontend/app/courses/[id]/_components/CourseCertificateCard.tsx.ejs +19 -9
  350. package/hedhog/frontend/app/courses/[id]/_components/CourseClassificationCard.tsx.ejs +24 -1
  351. package/hedhog/frontend/app/courses/[id]/_components/CourseContentCard.tsx.ejs +1 -1
  352. package/hedhog/frontend/app/courses/[id]/_components/CourseMainInfoCard.tsx.ejs +1 -1
  353. package/hedhog/frontend/app/courses/[id]/_components/CourseRelationsCard.tsx.ejs +51 -11
  354. package/hedhog/frontend/app/courses/[id]/_components/CourseSectionCard.tsx.ejs +11 -6
  355. package/hedhog/frontend/app/courses/[id]/_components/CourseSummaryCard.tsx.ejs +7 -4
  356. package/hedhog/frontend/app/courses/[id]/_components/course-edit-types.ts.ejs +2 -0
  357. package/hedhog/frontend/app/courses/[id]/page.tsx.ejs +24 -96
  358. package/hedhog/frontend/app/courses/[id]/structure/_components/course-tree-dnd.tsx.ejs +80 -66
  359. package/hedhog/frontend/app/courses/[id]/structure/_components/editor-course.tsx.ejs +1286 -230
  360. package/hedhog/frontend/app/courses/[id]/structure/_components/editor-lesson.tsx.ejs +1334 -153
  361. package/hedhog/frontend/app/courses/[id]/structure/_components/editor-session.tsx.ejs +11 -11
  362. package/hedhog/frontend/app/courses/[id]/structure/_components/mock-data.ts.ejs +1 -1
  363. package/hedhog/frontend/app/courses/[id]/structure/_components/shortcuts-help.tsx.ejs +62 -52
  364. package/hedhog/frontend/app/courses/[id]/structure/_components/tree-context-menu.tsx.ejs +106 -4
  365. package/hedhog/frontend/app/courses/[id]/structure/_components/types.ts.ejs +4 -1
  366. package/hedhog/frontend/app/courses/[id]/structure/_data/adapters/course-structure.adapter.ts.ejs +30 -7
  367. package/hedhog/frontend/app/courses/[id]/structure/_data/services/course-structure.service.ts.ejs +138 -6
  368. package/hedhog/frontend/app/courses/[id]/structure/_data/types/api-course.types.ts.ejs +16 -2
  369. package/hedhog/frontend/app/courses/[id]/structure/_data/use-course-structure-mutations.ts.ejs +1 -0
  370. package/hedhog/frontend/app/courses/page.tsx.ejs +282 -113
  371. package/hedhog/frontend/app/enterprise/[id]/page.tsx.ejs +1 -1
  372. package/hedhog/frontend/app/enterprise/_components/enterprise-admin-create-sheet.tsx.ejs +10 -3
  373. package/hedhog/frontend/app/enterprise/_components/enterprise-course-create-sheet.tsx.ejs +3 -0
  374. package/hedhog/frontend/app/enterprise/_components/enterprise-course-edit-sheet.tsx.ejs +7 -0
  375. package/hedhog/frontend/app/enterprise/_components/enterprise-detail-sheet.tsx.ejs +8 -4
  376. package/hedhog/frontend/app/enterprise/_components/enterprise-person-edit-sheet.tsx.ejs +2 -2
  377. package/hedhog/frontend/app/enterprise/_components/enterprise-sheet.tsx.ejs +10 -4
  378. package/hedhog/frontend/app/enterprise/_components/enterprise-student-create-sheet.tsx.ejs +10 -3
  379. package/hedhog/frontend/app/enterprise/_components/enterprise-user-create-sheet.tsx.ejs +10 -3
  380. package/hedhog/frontend/app/evaluations/_components/evaluation-topic-form-sheet.tsx.ejs +10 -3
  381. package/hedhog/frontend/app/exams/[id]/questions/page.tsx.ejs +186 -5
  382. package/hedhog/frontend/app/exams/page.tsx.ejs +89 -26
  383. package/hedhog/frontend/app/instructor-skills/page.tsx.ejs +10 -3
  384. package/hedhog/frontend/app/instructors/_components/instructor-form-sheet.tsx.ejs +190 -17
  385. package/hedhog/frontend/app/instructors/page.tsx.ejs +1 -0
  386. package/hedhog/frontend/app/layout.tsx.ejs +5 -1
  387. package/hedhog/frontend/app/paths/page.tsx.ejs +19 -29
  388. package/hedhog/frontend/app/reports/evaluations/page.tsx.ejs +10 -10
  389. package/hedhog/frontend/app/training/page.tsx.ejs +19 -29
  390. package/hedhog/frontend/app/video-resolution-profiles/page.tsx.ejs +607 -0
  391. package/hedhog/frontend/messages/en.json +563 -20
  392. package/hedhog/frontend/messages/pt.json +563 -20
  393. package/hedhog/query/triggers.sql +53 -0
  394. package/hedhog/table/achievement.yaml +46 -0
  395. package/hedhog/table/bitcode_wallet.yaml +18 -0
  396. package/hedhog/table/bitcode_wallet_transaction.yaml +22 -0
  397. package/hedhog/table/certificate.yaml +3 -0
  398. package/hedhog/table/course.yaml +8 -0
  399. package/hedhog/table/course_file.yaml +23 -0
  400. package/hedhog/table/course_lesson.yaml +5 -0
  401. package/hedhog/table/course_lesson_discussion_like.yaml +21 -0
  402. package/hedhog/table/course_lesson_discussion_topic.yaml +35 -0
  403. package/hedhog/table/course_lesson_file.yaml +8 -0
  404. package/hedhog/table/course_lesson_note.yaml +34 -0
  405. package/hedhog/table/course_video_resolution_profile.yaml +22 -0
  406. package/hedhog/table/exam.yaml +5 -0
  407. package/hedhog/table/learning_path_enrollment.yaml +6 -0
  408. package/hedhog/table/question.yaml +10 -0
  409. package/hedhog/table/question_subject.yaml +17 -0
  410. package/hedhog/table/student_activity_streak.yaml +25 -0
  411. package/hedhog/table/video_resolution_profile.yaml +18 -0
  412. package/package.json +8 -7
  413. package/src/achievement/achievement.controller.ts +60 -0
  414. package/src/achievement/achievement.mcp-tools.ts +108 -0
  415. package/src/achievement/achievement.module.ts +13 -0
  416. package/src/achievement/achievement.service.ts +252 -0
  417. package/src/achievement/dto/create-achievement.dto.ts +50 -0
  418. package/src/achievement/dto/update-achievement.dto.ts +47 -0
  419. package/src/bitcode-wallet/bitcode-wallet.controller.ts +69 -0
  420. package/src/bitcode-wallet/bitcode-wallet.mcp-tools.ts +107 -0
  421. package/src/bitcode-wallet/bitcode-wallet.module.ts +13 -0
  422. package/src/bitcode-wallet/bitcode-wallet.service.ts +361 -0
  423. package/src/bitcode-wallet/dto/create-bitcode-wallet-transaction.dto.ts +27 -0
  424. package/src/bitcode-wallet/dto/create-bitcode-wallet.dto.ts +7 -0
  425. package/src/bitcode-wallet/dto/update-bitcode-wallet-transaction.dto.ts +28 -0
  426. package/src/bitcode-wallet/dto/update-bitcode-wallet.dto.ts +8 -0
  427. package/src/certificate/certificate.controller.ts +17 -3
  428. package/src/certificate/certificate.mcp-tools.ts +131 -0
  429. package/src/certificate/certificate.module.ts +2 -1
  430. package/src/certificate/certificate.service.ts +193 -7
  431. package/src/certificate/dto/update-certificate-public-access.dto.ts +6 -0
  432. package/src/class-group/class-group.mcp-tools.ts +435 -0
  433. package/src/class-group/class-group.module.ts +2 -1
  434. package/src/class-group/class-group.service.ts +51 -1
  435. package/src/course/course-operations-integration.service.ts +520 -0
  436. package/src/course/course-structure.controller.ts +46 -10
  437. package/src/course/course-structure.service.ts +236 -27
  438. package/src/course/course-video-conversion.service.ts +415 -0
  439. package/src/course/course.controller.ts +18 -0
  440. package/src/course/course.mcp-tools.ts +409 -0
  441. package/src/course/course.module.ts +23 -3
  442. package/src/course/course.service.ts +178 -29
  443. package/src/course/dto/create-course-structure-lesson.dto.ts +13 -2
  444. package/src/course/dto/create-course.dto.ts +16 -0
  445. package/src/course/dto/update-course-resources.dto.ts +39 -0
  446. package/src/course-lesson-discussion/course-lesson-discussion.controller.ts +55 -0
  447. package/src/course-lesson-discussion/course-lesson-discussion.mcp-tools.ts +75 -0
  448. package/src/course-lesson-discussion/course-lesson-discussion.module.ts +13 -0
  449. package/src/course-lesson-discussion/course-lesson-discussion.service.ts +354 -0
  450. package/src/course-lesson-discussion/dto/create-course-lesson-discussion-topic.dto.ts +16 -0
  451. package/src/course-lesson-note/course-lesson-note.controller.ts +68 -0
  452. package/src/course-lesson-note/course-lesson-note.mcp-tools.ts +96 -0
  453. package/src/course-lesson-note/course-lesson-note.module.ts +13 -0
  454. package/src/course-lesson-note/course-lesson-note.service.ts +248 -0
  455. package/src/course-lesson-note/dto/create-course-lesson-note.dto.ts +16 -0
  456. package/src/course-lesson-note/dto/update-course-lesson-note.dto.ts +18 -0
  457. package/src/dashboard/dashboard.mcp-tools.ts +23 -0
  458. package/src/dashboard/dashboard.module.ts +2 -1
  459. package/src/enterprise/enterprise.controller.ts +0 -1
  460. package/src/enterprise/enterprise.mcp-tools.ts +403 -0
  461. package/src/enterprise/enterprise.module.ts +2 -1
  462. package/src/enterprise/training/enterprise-training.module.ts +11 -1
  463. package/src/enterprise/training/training-admin.mcp-tools.ts +479 -0
  464. package/src/enterprise/training/training-instructor.mcp-tools.ts +210 -0
  465. package/src/enterprise/training/training-student.controller.ts +17 -1
  466. package/src/enterprise/training/training-student.mcp-tools.ts +136 -0
  467. package/src/enterprise/training/training-student.service.ts +167 -1
  468. package/src/evaluation/evaluation.mcp-tools.ts +155 -0
  469. package/src/evaluation/evaluation.module.ts +2 -1
  470. package/src/evaluation/evaluation.service.ts +9 -2
  471. package/src/exam/dto/create-exam-question.dto.ts +8 -0
  472. package/src/exam/dto/create-exam.dto.ts +8 -0
  473. package/src/exam/dto/create-question-subject.dto.ts +12 -0
  474. package/src/exam/exam-attempt.service.ts +46 -14
  475. package/src/exam/exam.controller.ts +19 -0
  476. package/src/exam/exam.mcp-tools.ts +337 -0
  477. package/src/exam/exam.module.ts +2 -1
  478. package/src/exam/exam.service.ts +121 -0
  479. package/src/index.ts +10 -0
  480. package/src/instructor/instructor.mcp-tools.ts +243 -0
  481. package/src/instructor/instructor.module.ts +2 -1
  482. package/src/lms.module.ts +18 -1
  483. package/src/realtime/lms-realtime.controller.ts +12 -0
  484. package/src/realtime/lms-realtime.module.ts +12 -0
  485. package/src/realtime/lms-realtime.service.ts +98 -0
  486. package/src/realtime/lms-realtime.subscriber.ts +61 -0
  487. package/src/reports/reports.mcp-tools.ts +27 -0
  488. package/src/reports/reports.module.ts +2 -1
  489. package/src/training/training.mcp-tools.ts +128 -0
  490. package/src/training/training.module.ts +2 -1
  491. package/src/video-resolution-profile/dto/create-video-resolution-profile.dto.ts +16 -0
  492. package/src/video-resolution-profile/dto/update-video-resolution-profile.dto.ts +16 -0
  493. package/src/video-resolution-profile/video-resolution-profile.controller.ts +62 -0
  494. package/src/video-resolution-profile/video-resolution-profile.mcp-tools.ts +128 -0
  495. package/src/video-resolution-profile/video-resolution-profile.module.ts +13 -0
  496. package/src/video-resolution-profile/video-resolution-profile.service.ts +117 -0
@@ -140,9 +140,9 @@ export function EditorSession({ sessionId }: EditorSessionProps) {
140
140
  className="flex flex-col h-full min-h-0"
141
141
  >
142
142
  {/* ── Header ───────────────────────────────────────────────────────── */}
143
- <div className="flex items-center gap-3 px-4 py-3 border-b bg-muted/30 shrink-0">
144
- <div className="flex size-9 items-center justify-center rounded-lg bg-muted shrink-0">
145
- <Layers className="size-4 text-muted-foreground" />
143
+ <div className="flex items-center gap-2 border-b bg-muted/30 px-2 py-2 shrink-0 sm:gap-3 sm:px-4 sm:py-3">
144
+ <div className="flex size-8 items-center justify-center rounded-md bg-muted shrink-0 sm:size-9 sm:rounded-lg">
145
+ <Layers className="size-3.5 text-muted-foreground sm:size-4" />
146
146
  </div>
147
147
  <div className="flex-1 min-w-0">
148
148
  <div className="flex items-center gap-1.5">
@@ -204,7 +204,7 @@ export function EditorSession({ sessionId }: EditorSessionProps) {
204
204
  </CardTitle>
205
205
  </CardHeader>
206
206
  <CardContent className="px-3 pb-2 flex flex-col gap-3">
207
- <div className="grid grid-cols-2 gap-2">
207
+ <div className="grid grid-cols-1 gap-2 sm:grid-cols-2">
208
208
  <FormField
209
209
  control={form.control}
210
210
  name="code"
@@ -280,7 +280,7 @@ export function EditorSession({ sessionId }: EditorSessionProps) {
280
280
  </CardTitle>
281
281
  </CardHeader>
282
282
  <CardContent className="px-3 pb-2">
283
- <div className="grid grid-cols-2 gap-2 items-end">
283
+ <div className="grid grid-cols-1 gap-2 items-end sm:grid-cols-2">
284
284
  <FormField
285
285
  control={form.control}
286
286
  name="visibility"
@@ -342,7 +342,7 @@ export function EditorSession({ sessionId }: EditorSessionProps) {
342
342
 
343
343
  {/* ── Aulas da sessão ───────────────────────────────────────────── */}
344
344
  {lessons.length === 0 && (
345
- <div className="flex flex-col items-center gap-2 py-6 px-2 rounded-lg border border-dashed text-center">
345
+ <div className="flex flex-col items-center gap-2 px-2 py-4 rounded-lg border border-dashed text-center sm:py-6">
346
346
  <Video className="size-5 text-muted-foreground/40" />
347
347
  <p className="text-xs text-muted-foreground leading-relaxed">
348
348
  Esta sessão ainda não tem aulas.
@@ -370,12 +370,12 @@ export function EditorSession({ sessionId }: EditorSessionProps) {
370
370
  {/* ── Footer ───────────────────────────────────────────────────────── */}
371
371
  <div className="shrink-0 border-t bg-background">
372
372
  <Separator />
373
- <div className="flex items-center gap-2 px-3 py-2">
373
+ <div className="flex items-center gap-1.5 px-2 py-1.5 sm:gap-2 sm:px-3 sm:py-2">
374
374
  <Button
375
375
  type="button"
376
376
  variant="ghost"
377
377
  size="sm"
378
- className="h-7 text-xs"
378
+ className="h-6 text-[11px] sm:h-7 sm:text-xs"
379
379
  disabled={!isDirty || updateSession.isPending}
380
380
  onClick={() => form.reset()}
381
381
  >
@@ -387,7 +387,7 @@ export function EditorSession({ sessionId }: EditorSessionProps) {
387
387
  type="button"
388
388
  variant="outline"
389
389
  size="sm"
390
- className="h-7 text-xs"
390
+ className="h-6 text-[11px] sm:h-7 sm:text-xs"
391
391
  disabled={createLesson.isPending}
392
392
  onClick={() => createLesson.mutate({ sessionId })}
393
393
  >
@@ -401,7 +401,7 @@ export function EditorSession({ sessionId }: EditorSessionProps) {
401
401
  <Button
402
402
  type="submit"
403
403
  size="sm"
404
- className="h-7 text-xs"
404
+ className="h-6 text-[11px] sm:h-7 sm:text-xs"
405
405
  disabled={!isDirty || updateSession.isPending}
406
406
  >
407
407
  {updateSession.isPending ? (
@@ -430,7 +430,7 @@ function StatChip({
430
430
  value: string | number;
431
431
  }) {
432
432
  return (
433
- <div className="flex items-center gap-2 rounded-md border bg-muted/20 px-2.5 py-2">
433
+ <div className="flex items-center gap-1.5 rounded-md border bg-muted/20 px-2 py-1.5 sm:gap-2 sm:px-2.5 sm:py-2">
434
434
  <span className="text-muted-foreground shrink-0">{icon}</span>
435
435
  <div className="min-w-0">
436
436
  <p className="text-[0.65rem] text-muted-foreground truncate">{label}</p>
@@ -111,7 +111,7 @@ const LESSON_TYPES: LessonType[] = [
111
111
  const PROVIDERS: VideoProvider[] = [
112
112
  'youtube',
113
113
  'vimeo',
114
- 'bunny',
114
+ 'file_storage',
115
115
  'youtube',
116
116
  'youtube',
117
117
  ];
@@ -6,11 +6,11 @@ import { useTranslations } from 'next-intl';
6
6
  import { Badge } from '@/components/ui/badge';
7
7
  import { Button } from '@/components/ui/button';
8
8
  import {
9
- Dialog,
10
- DialogContent,
11
- DialogHeader,
12
- DialogTitle,
13
- } from '@/components/ui/dialog';
9
+ Sheet,
10
+ SheetHeader,
11
+ SheetTitle,
12
+ } from '@/components/ui/sheet';
13
+ import { ResizableSheetContent } from '@/components/ui/resizable-sheet-content';
14
14
  import { Separator } from '@/components/ui/separator';
15
15
 
16
16
  // ── Data ──────────────────────────────────────────────────────────────────────
@@ -99,56 +99,65 @@ export function ShortcutsHelp({ open, onOpenChange }: ShortcutsHelpProps) {
99
99
  },
100
100
  ];
101
101
  return (
102
- <Dialog open={open} onOpenChange={onOpenChange}>
103
- <DialogContent className="max-w-sm">
104
- <DialogHeader>
105
- <DialogTitle className="flex items-center gap-2">
102
+ <Sheet open={open} onOpenChange={onOpenChange}>
103
+ <ResizableSheetContent
104
+ sheetId="lms-course-structure-shortcuts-help-sheet"
105
+ defaultWidth={520}
106
+ minWidth={400}
107
+ maxWidth={860}
108
+ side="right"
109
+ className="w-full sm:max-w-md p-0 gap-0"
110
+ >
111
+ <SheetHeader className="border-b px-4 py-3">
112
+ <SheetTitle className="flex items-center gap-2">
106
113
  <Keyboard className="size-4" />
107
114
  {t('title')}
108
- </DialogTitle>
109
- </DialogHeader>
115
+ </SheetTitle>
116
+ </SheetHeader>
110
117
 
111
- <div className="flex flex-col gap-4 mt-1">
112
- {shortcutGroups.map((group, gi) => (
113
- <div key={gi}>
114
- <p className="text-[0.65rem] font-semibold uppercase tracking-wider text-muted-foreground mb-2">
115
- {group.heading}
116
- </p>
117
- <div className="flex flex-col gap-1.5">
118
- {group.items.map(({ keys, description }, ki) => (
119
- <div
120
- key={ki}
121
- className="flex items-center justify-between gap-3"
122
- >
123
- <span className="text-sm text-muted-foreground">
124
- {description}
125
- </span>
126
- <div className="flex items-center gap-1 shrink-0">
127
- {keys.map((k, i) => (
128
- <Badge
129
- key={i}
130
- variant="outline"
131
- className="h-5 px-1.5 text-[0.65rem] font-mono font-medium"
132
- >
133
- {k}
134
- </Badge>
135
- ))}
118
+ <div className="flex-1 min-h-0 overflow-y-auto px-4 py-3">
119
+ <div className="flex flex-col gap-4 mt-1">
120
+ {shortcutGroups.map((group, gi) => (
121
+ <div key={gi}>
122
+ <p className="text-[0.65rem] font-semibold uppercase tracking-wider text-muted-foreground mb-2">
123
+ {group.heading}
124
+ </p>
125
+ <div className="flex flex-col gap-1.5">
126
+ {group.items.map(({ keys, description }, ki) => (
127
+ <div
128
+ key={ki}
129
+ className="flex items-center justify-between gap-3"
130
+ >
131
+ <span className="text-sm text-muted-foreground">
132
+ {description}
133
+ </span>
134
+ <div className="flex items-center gap-1 shrink-0">
135
+ {keys.map((k, i) => (
136
+ <Badge
137
+ key={i}
138
+ variant="outline"
139
+ className="h-5 px-1.5 text-[0.65rem] font-mono font-medium"
140
+ >
141
+ {k}
142
+ </Badge>
143
+ ))}
144
+ </div>
136
145
  </div>
137
- </div>
138
- ))}
146
+ ))}
147
+ </div>
148
+ {gi < shortcutGroups.length - 1 && (
149
+ <Separator className="mt-3" />
150
+ )}
139
151
  </div>
140
- {gi < SHORTCUT_GROUPS.length - 1 && (
141
- <Separator className="mt-3" />
142
- )}
143
- </div>
144
- ))}
145
- </div>
152
+ ))}
153
+ </div>
146
154
 
147
- <p className="text-[0.65rem] text-muted-foreground mt-1">
148
- {t('footer')}
149
- </p>
150
- </DialogContent>
151
- </Dialog>
155
+ <p className="text-[0.65rem] text-muted-foreground mt-4">
156
+ {t('footer')}
157
+ </p>
158
+ </div>
159
+ </ResizableSheetContent>
160
+ </Sheet>
152
161
  );
153
162
  }
154
163
 
@@ -161,15 +170,16 @@ export function ShortcutsHelpTrigger({ onOpen }: { onOpen: () => void }) {
161
170
  <Button
162
171
  variant="ghost"
163
172
  size="sm"
164
- className="h-8 gap-1.5 text-xs text-muted-foreground hover:text-foreground"
173
+ className="h-8 gap-1.5 px-2 text-xs text-muted-foreground hover:text-foreground sm:px-3"
165
174
  onClick={onOpen}
166
175
  title={t('triggerTitle')}
176
+ aria-label={t('triggerTitle')}
167
177
  >
168
178
  <Keyboard className="size-3.5" />
169
- {t('triggerLabel')}
179
+ <span className="sr-only sm:not-sr-only">{t('triggerLabel')}</span>
170
180
  <Badge
171
181
  variant="outline"
172
- className="h-4 px-1 text-[0.6rem] font-mono ml-0.5"
182
+ className="ml-0.5 hidden h-4 px-1 text-[0.6rem] font-mono sm:inline-flex"
173
183
  >
174
184
  Ctrl+/
175
185
  </Badge>
@@ -21,6 +21,7 @@ import {
21
21
  Plus,
22
22
  Trash2,
23
23
  } from 'lucide-react';
24
+ import { useTranslations } from 'next-intl';
24
25
  import { toast } from 'sonner';
25
26
 
26
27
  import {
@@ -53,6 +54,7 @@ interface TreeContextMenuProps {
53
54
  // ─────────────────────────────────────────────────────────────────────────────
54
55
 
55
56
  function CourseMenu({ data }: { data: Course }) {
57
+ const t = useTranslations('lms.CoursesPage.StructurePage');
56
58
  const expandAll = useStructureStore((s) => s.expandAll);
57
59
  const collapseAll = useStructureStore((s) => s.collapseAll);
58
60
  const copiedType = useStructureStore((s) => s.copiedType);
@@ -80,7 +82,7 @@ function CourseMenu({ data }: { data: Course }) {
80
82
  ) : (
81
83
  <Plus className="size-3.5 mr-2 text-muted-foreground" />
82
84
  )}
83
- Nova sessão
85
+ {t('contextMenu.addSession')}
84
86
  </ContextMenuItem>
85
87
 
86
88
  <ContextMenuSeparator />
@@ -92,7 +94,7 @@ function CourseMenu({ data }: { data: Course }) {
92
94
  }}
93
95
  >
94
96
  <BookOpen className="size-3.5 mr-2 text-muted-foreground" />
95
- Expandir tudo
97
+ {t('tree.expandAll')}
96
98
  </ContextMenuItem>
97
99
 
98
100
  <ContextMenuItem
@@ -102,7 +104,7 @@ function CourseMenu({ data }: { data: Course }) {
102
104
  }}
103
105
  >
104
106
  <Layers className="size-3.5 mr-2 text-muted-foreground" />
105
- Recolher tudo
107
+ {t('tree.collapseAll')}
106
108
  </ContextMenuItem>
107
109
 
108
110
  {hasSessionClipboard && (
@@ -119,7 +121,8 @@ function CourseMenu({ data }: { data: Course }) {
119
121
  ) : (
120
122
  <Clipboard className="size-3.5 mr-2 text-muted-foreground" />
121
123
  )}
122
- Colar sessão{copiedIds.length > 1 ? ` (${copiedIds.length})` : ''}
124
+ {t('contextMenu.pasteSession')}
125
+ {copiedIds.length > 1 ? ` (${copiedIds.length})` : ''}
123
126
  </ContextMenuItem>
124
127
  </>
125
128
  )}
@@ -523,3 +526,102 @@ export function TreeContextMenu({ item, children }: TreeContextMenuProps) {
523
526
  </ContextMenu>
524
527
  );
525
528
  }
529
+
530
+ export function TreeRootContextMenu({
531
+ children,
532
+ }: {
533
+ children: React.ReactNode;
534
+ }) {
535
+ const t = useTranslations('lms.CoursesPage.StructurePage');
536
+ const course = useStructureStore((s) => s.course);
537
+ const activeItemId = useStructureStore((s) => s.activeItemId);
538
+ const activeItemType = useStructureStore((s) => s.activeItemType);
539
+ const lessons = useStructureStore((s) => s.lessons);
540
+ const copiedType = useStructureStore((s) => s.copiedType);
541
+ const copiedIds = useStructureStore((s) => s.copiedIds);
542
+
543
+ const createSessionMutation = useCreateSessionMutation();
544
+ const pasteSessionsMutation = usePasteSessionsMutation();
545
+ const pasteLessonsMutation = usePasteLessonsMutation();
546
+
547
+ const hasSessionClipboard = copiedType === 'session' && copiedIds.length > 0;
548
+ const hasLessonClipboard = copiedType === 'lesson' && copiedIds.length > 0;
549
+
550
+ function getActiveSessionId(): string | null {
551
+ if (activeItemType === 'session' && activeItemId) return activeItemId;
552
+ if (activeItemType === 'lesson' && activeItemId) {
553
+ const lesson = lessons.find((item) => item.id === activeItemId);
554
+ return lesson?.sessionId ?? null;
555
+ }
556
+ return null;
557
+ }
558
+
559
+ return (
560
+ <ContextMenu>
561
+ <ContextMenuTrigger className="block h-full w-full">
562
+ {children}
563
+ </ContextMenuTrigger>
564
+ <ContextMenuContent className="w-56">
565
+ <ContextMenuLabel className="text-[0.65rem] text-muted-foreground px-2 py-1">
566
+ {course.title || course.name || t('contextMenu.courseFallback')}
567
+ </ContextMenuLabel>
568
+ <ContextMenuSeparator />
569
+
570
+ <ContextMenuItem
571
+ disabled={createSessionMutation.isPending}
572
+ onSelect={() => createSessionMutation.mutate()}
573
+ >
574
+ {createSessionMutation.isPending ? (
575
+ <Loader2 className="size-3.5 mr-2 animate-spin" />
576
+ ) : (
577
+ <Plus className="size-3.5 mr-2 text-muted-foreground" />
578
+ )}
579
+ {t('contextMenu.addSession')}
580
+ </ContextMenuItem>
581
+
582
+ {hasSessionClipboard && (
583
+ <ContextMenuItem
584
+ disabled={pasteSessionsMutation.isPending}
585
+ onSelect={() => {
586
+ pasteSessionsMutation.mutate({ sessionIds: copiedIds });
587
+ }}
588
+ >
589
+ {pasteSessionsMutation.isPending ? (
590
+ <Loader2 className="size-3.5 mr-2 animate-spin" />
591
+ ) : (
592
+ <Clipboard className="size-3.5 mr-2 text-muted-foreground" />
593
+ )}
594
+ {t('contextMenu.pasteSession')}
595
+ {copiedIds.length > 1 ? ` (${copiedIds.length})` : ''}
596
+ </ContextMenuItem>
597
+ )}
598
+
599
+ {hasLessonClipboard && (
600
+ <ContextMenuItem
601
+ disabled={pasteLessonsMutation.isPending}
602
+ onSelect={() => {
603
+ const targetSessionId = getActiveSessionId();
604
+ if (!targetSessionId) {
605
+ toast.error(t('contextMenu.selectSessionToPasteLessons'));
606
+ return;
607
+ }
608
+ pasteLessonsMutation.mutate({
609
+ targetSessionId,
610
+ lessonIds: copiedIds,
611
+ });
612
+ }}
613
+ >
614
+ {pasteLessonsMutation.isPending ? (
615
+ <Loader2 className="size-3.5 mr-2 animate-spin" />
616
+ ) : (
617
+ <Clipboard className="size-3.5 mr-2 text-muted-foreground" />
618
+ )}
619
+ {copiedIds.length > 1
620
+ ? t('contextMenu.pasteLessons', { count: copiedIds.length })
621
+ : t('contextMenu.pasteLesson')}
622
+ </ContextMenuItem>
623
+ )}
624
+ </ContextMenuContent>
625
+ </ContextMenu>
626
+ );
627
+ }
@@ -3,7 +3,7 @@
3
3
  // ─────────────────────────────────────────────────────────────────────────────
4
4
 
5
5
  export type LessonType = 'video' | 'questao' | 'post' | 'exercicio';
6
- export type VideoProvider = 'youtube' | 'vimeo' | 'bunny' | 'custom';
6
+ export type VideoProvider = 'youtube' | 'vimeo' | 'file_storage';
7
7
  export type ItemType = 'course' | 'session' | 'lesson';
8
8
 
9
9
  export type LessonStatus =
@@ -24,6 +24,7 @@ export interface Course {
24
24
  title: string;
25
25
  description: string;
26
26
  slug: string;
27
+ offeringType?: 'scheduled' | 'on_demand' | 'blended';
27
28
  published: boolean;
28
29
  }
29
30
 
@@ -40,6 +41,7 @@ export interface Session {
40
41
 
41
42
  export interface Resource {
42
43
  id: string;
44
+ fileId?: number;
43
45
  name: string;
44
46
  size: string;
45
47
  type: string;
@@ -71,6 +73,7 @@ export interface Lesson {
71
73
  videoUrl?: string;
72
74
  autoDuration?: boolean;
73
75
  transcription?: string;
76
+ videoConversionJobId?: number;
74
77
  // Questão
75
78
  linkedExam?: string;
76
79
  // Post
@@ -61,10 +61,20 @@ function normalizeLessonType(tipo: ApiLesson['tipo']): LessonType {
61
61
  return tipo as LessonType;
62
62
  }
63
63
 
64
+ function normalizeVideoProvider(
65
+ provider?: ApiLesson['videoProvedor']
66
+ ): Lesson['videoProvider'] {
67
+ if (provider === 'youtube' || provider === 'vimeo') return provider;
68
+ if (provider === 'file_storage') return 'file_storage';
69
+ if (provider === 'bunny' || provider === 'custom') return 'file_storage';
70
+ return undefined;
71
+ }
72
+
64
73
  /** Normalize a raw API resource to the frontend Resource shape. */
65
74
  function normalizeResource(raw: ApiLessonResource): Resource {
66
75
  return {
67
76
  id: String(raw.id),
77
+ fileId: raw.fileId ?? undefined,
68
78
  name: raw.nome,
69
79
  type: raw.tipo ?? '',
70
80
  /**
@@ -96,6 +106,7 @@ export function normalizeCourse(raw: ApiCourse): Course {
96
106
  title: raw.titulo,
97
107
  description: raw.descricao,
98
108
  slug: raw.slug,
109
+ offeringType: raw.offeringType,
99
110
  published: false,
100
111
  };
101
112
  }
@@ -149,10 +160,11 @@ export function normalizeLesson(raw: ApiLesson, order = 0): Lesson {
149
160
  duration: raw.duracao,
150
161
  sessionId: raw.sessaoId,
151
162
  order,
152
- videoProvider: raw.videoProvedor,
163
+ videoProvider: normalizeVideoProvider(raw.videoProvedor),
153
164
  videoUrl: raw.videoUrl,
154
165
  autoDuration: raw.duracaoAutomatica,
155
166
  transcription: raw.transcricao,
167
+ videoConversionJobId: raw.videoConversionJobId,
156
168
  /**
157
169
  * ⚠️ TYPE MISMATCH: backend sends `exameVinculado` as number;
158
170
  * frontend uses `linkedExam` as string. Converted with String().
@@ -255,6 +267,7 @@ export function toUpdateSessionPayload(
255
267
  export function toCreateLessonPayload(
256
268
  data: LessonFormValues & {
257
269
  transcription?: string;
270
+ videoConversionJobId?: number;
258
271
  instructorIds?: number[];
259
272
  resources?: LessonResourceInput[];
260
273
  }
@@ -275,6 +288,9 @@ export function toCreateLessonPayload(
275
288
  duracaoAutomatica: data.autoDuration,
276
289
  }),
277
290
  ...(data.transcription && { transcricao: data.transcription }),
291
+ ...(data.videoConversionJobId !== undefined && {
292
+ videoConversionJobId: data.videoConversionJobId,
293
+ }),
278
294
  // ⚠️ TYPE MISMATCH: frontend stores linkedExam as string; backend expects number.
279
295
  ...(data.linkedExam && { exameVinculado: Number(data.linkedExam) }),
280
296
  ...(data.postContent && { conteudoPost: data.postContent }),
@@ -284,9 +300,11 @@ export function toCreateLessonPayload(
284
300
  recursos: data.resources.map((r) => ({
285
301
  nome: r.name,
286
302
  // Only include fileId when the id is a valid server-assigned integer.
287
- ...(Number.isInteger(Number(r.id)) && Number(r.id) > 0
288
- ? { fileId: Number(r.id) }
289
- : {}),
303
+ ...(Number.isInteger(r.fileId ?? Number.NaN) && (r.fileId ?? 0) > 0
304
+ ? { fileId: r.fileId }
305
+ : Number.isInteger(Number(r.id)) && Number(r.id) > 0
306
+ ? { fileId: Number(r.id) }
307
+ : {}),
290
308
  ...(r.type ? { tipo: r.type } : {}),
291
309
  publico: r.public,
292
310
  })),
@@ -302,6 +320,7 @@ export function toUpdateLessonPayload(
302
320
  data: Partial<
303
321
  LessonFormValues & {
304
322
  transcription?: string;
323
+ videoConversionJobId?: number;
305
324
  instructorIds?: number[];
306
325
  resources?: LessonResourceInput[];
307
326
  }
@@ -323,6 +342,8 @@ export function toUpdateLessonPayload(
323
342
  payload.duracaoAutomatica = data.autoDuration;
324
343
  if (data.transcription !== undefined)
325
344
  payload.transcricao = data.transcription;
345
+ if (data.videoConversionJobId !== undefined)
346
+ payload.videoConversionJobId = data.videoConversionJobId;
326
347
  if (data.postContent !== undefined) payload.conteudoPost = data.postContent;
327
348
  if (data.code !== undefined) payload.codigo = data.code;
328
349
  if (data.instructorIds !== undefined)
@@ -337,9 +358,11 @@ export function toUpdateLessonPayload(
337
358
  if (data.resources !== undefined) {
338
359
  payload.recursos = data.resources.map((r) => ({
339
360
  nome: r.name,
340
- ...(Number.isInteger(Number(r.id)) && Number(r.id) > 0
341
- ? { fileId: Number(r.id) }
342
- : {}),
361
+ ...(Number.isInteger(r.fileId ?? Number.NaN) && (r.fileId ?? 0) > 0
362
+ ? { fileId: r.fileId }
363
+ : Number.isInteger(Number(r.id)) && Number(r.id) > 0
364
+ ? { fileId: Number(r.id) }
365
+ : {}),
343
366
  ...(r.type ? { tipo: r.type } : {}),
344
367
  publico: r.public,
345
368
  }));