@hed-hog/lms 0.0.349 → 0.0.350

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 (409) 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 +22 -0
  58. package/dist/certificate/certificate.controller.d.ts.map +1 -1
  59. package/dist/certificate/certificate.controller.js +12 -0
  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 +25 -2
  69. package/dist/certificate/certificate.service.d.ts.map +1 -1
  70. package/dist/certificate/certificate.service.js +87 -2
  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 +43 -4
  92. package/dist/course/course-structure.controller.d.ts.map +1 -1
  93. package/dist/course/course-structure.controller.js +22 -0
  94. package/dist/course/course-structure.controller.js.map +1 -1
  95. package/dist/course/course-structure.service.d.ts +42 -1
  96. package/dist/course/course-structure.service.d.ts.map +1 -1
  97. package/dist/course/course-structure.service.js +199 -32
  98. package/dist/course/course-structure.service.js.map +1 -1
  99. package/dist/course/course.controller.d.ts +12 -0
  100. package/dist/course/course.controller.d.ts.map +1 -1
  101. package/dist/course/course.mcp-tools.d.ts +90 -0
  102. package/dist/course/course.mcp-tools.d.ts.map +1 -0
  103. package/dist/course/course.mcp-tools.js +520 -0
  104. package/dist/course/course.mcp-tools.js.map +1 -0
  105. package/dist/course/course.module.d.ts.map +1 -1
  106. package/dist/course/course.module.js +8 -1
  107. package/dist/course/course.module.js.map +1 -1
  108. package/dist/course/course.service.d.ts +15 -1
  109. package/dist/course/course.service.d.ts.map +1 -1
  110. package/dist/course/course.service.js +70 -35
  111. package/dist/course/course.service.js.map +1 -1
  112. package/dist/course/dto/create-course.dto.d.ts +1 -0
  113. package/dist/course/dto/create-course.dto.d.ts.map +1 -1
  114. package/dist/course/dto/create-course.dto.js +7 -0
  115. package/dist/course/dto/create-course.dto.js.map +1 -1
  116. package/dist/course/dto/update-course-resources.dto.d.ts +11 -0
  117. package/dist/course/dto/update-course-resources.dto.d.ts.map +1 -0
  118. package/dist/course/dto/update-course-resources.dto.js +51 -0
  119. package/dist/course/dto/update-course-resources.dto.js.map +1 -0
  120. package/dist/course-lesson-discussion/course-lesson-discussion.controller.d.ts +23 -0
  121. package/dist/course-lesson-discussion/course-lesson-discussion.controller.d.ts.map +1 -0
  122. package/dist/course-lesson-discussion/course-lesson-discussion.controller.js +78 -0
  123. package/dist/course-lesson-discussion/course-lesson-discussion.controller.js.map +1 -0
  124. package/dist/course-lesson-discussion/course-lesson-discussion.mcp-tools.d.ts +22 -0
  125. package/dist/course-lesson-discussion/course-lesson-discussion.mcp-tools.d.ts.map +1 -0
  126. package/dist/course-lesson-discussion/course-lesson-discussion.mcp-tools.js +120 -0
  127. package/dist/course-lesson-discussion/course-lesson-discussion.mcp-tools.js.map +1 -0
  128. package/dist/course-lesson-discussion/course-lesson-discussion.module.d.ts +3 -0
  129. package/dist/course-lesson-discussion/course-lesson-discussion.module.d.ts.map +1 -0
  130. package/dist/course-lesson-discussion/course-lesson-discussion.module.js +26 -0
  131. package/dist/course-lesson-discussion/course-lesson-discussion.module.js.map +1 -0
  132. package/dist/course-lesson-discussion/course-lesson-discussion.service.d.ts +49 -0
  133. package/dist/course-lesson-discussion/course-lesson-discussion.service.d.ts.map +1 -0
  134. package/dist/course-lesson-discussion/course-lesson-discussion.service.js +272 -0
  135. package/dist/course-lesson-discussion/course-lesson-discussion.service.js.map +1 -0
  136. package/dist/course-lesson-discussion/dto/create-course-lesson-discussion-topic.dto.d.ts +6 -0
  137. package/dist/course-lesson-discussion/dto/create-course-lesson-discussion-topic.dto.d.ts.map +1 -0
  138. package/dist/course-lesson-discussion/dto/create-course-lesson-discussion-topic.dto.js +33 -0
  139. package/dist/course-lesson-discussion/dto/create-course-lesson-discussion-topic.dto.js.map +1 -0
  140. package/dist/course-lesson-note/course-lesson-note.controller.d.ts +53 -0
  141. package/dist/course-lesson-note/course-lesson-note.controller.d.ts.map +1 -0
  142. package/dist/course-lesson-note/course-lesson-note.controller.js +93 -0
  143. package/dist/course-lesson-note/course-lesson-note.controller.js.map +1 -0
  144. package/dist/course-lesson-note/course-lesson-note.mcp-tools.d.ts +27 -0
  145. package/dist/course-lesson-note/course-lesson-note.mcp-tools.d.ts.map +1 -0
  146. package/dist/course-lesson-note/course-lesson-note.mcp-tools.js +145 -0
  147. package/dist/course-lesson-note/course-lesson-note.mcp-tools.js.map +1 -0
  148. package/dist/course-lesson-note/course-lesson-note.module.d.ts +3 -0
  149. package/dist/course-lesson-note/course-lesson-note.module.d.ts.map +1 -0
  150. package/dist/course-lesson-note/course-lesson-note.module.js +26 -0
  151. package/dist/course-lesson-note/course-lesson-note.module.js.map +1 -0
  152. package/dist/course-lesson-note/course-lesson-note.service.d.ts +59 -0
  153. package/dist/course-lesson-note/course-lesson-note.service.d.ts.map +1 -0
  154. package/dist/course-lesson-note/course-lesson-note.service.js +195 -0
  155. package/dist/course-lesson-note/course-lesson-note.service.js.map +1 -0
  156. package/dist/course-lesson-note/dto/create-course-lesson-note.dto.d.ts +6 -0
  157. package/dist/course-lesson-note/dto/create-course-lesson-note.dto.d.ts.map +1 -0
  158. package/dist/course-lesson-note/dto/create-course-lesson-note.dto.js +33 -0
  159. package/dist/course-lesson-note/dto/create-course-lesson-note.dto.js.map +1 -0
  160. package/dist/course-lesson-note/dto/update-course-lesson-note.dto.d.ts +6 -0
  161. package/dist/course-lesson-note/dto/update-course-lesson-note.dto.d.ts.map +1 -0
  162. package/dist/course-lesson-note/dto/update-course-lesson-note.dto.js +35 -0
  163. package/dist/course-lesson-note/dto/update-course-lesson-note.dto.js.map +1 -0
  164. package/dist/dashboard/dashboard.mcp-tools.d.ts +10 -0
  165. package/dist/dashboard/dashboard.mcp-tools.d.ts.map +1 -0
  166. package/dist/dashboard/dashboard.mcp-tools.js +46 -0
  167. package/dist/dashboard/dashboard.mcp-tools.js.map +1 -0
  168. package/dist/dashboard/dashboard.module.d.ts.map +1 -1
  169. package/dist/dashboard/dashboard.module.js +2 -1
  170. package/dist/dashboard/dashboard.module.js.map +1 -1
  171. package/dist/enterprise/enterprise.mcp-tools.d.ts +82 -0
  172. package/dist/enterprise/enterprise.mcp-tools.d.ts.map +1 -0
  173. package/dist/enterprise/enterprise.mcp-tools.js +516 -0
  174. package/dist/enterprise/enterprise.mcp-tools.js.map +1 -0
  175. package/dist/enterprise/enterprise.module.d.ts.map +1 -1
  176. package/dist/enterprise/enterprise.module.js +2 -1
  177. package/dist/enterprise/enterprise.module.js.map +1 -1
  178. package/dist/enterprise/training/enterprise-training.module.d.ts.map +1 -1
  179. package/dist/enterprise/training/enterprise-training.module.js +11 -1
  180. package/dist/enterprise/training/enterprise-training.module.js.map +1 -1
  181. package/dist/enterprise/training/training-admin.mcp-tools.d.ts +79 -0
  182. package/dist/enterprise/training/training-admin.mcp-tools.d.ts.map +1 -0
  183. package/dist/enterprise/training/training-admin.mcp-tools.js +620 -0
  184. package/dist/enterprise/training/training-admin.mcp-tools.js.map +1 -0
  185. package/dist/enterprise/training/training-instructor.mcp-tools.d.ts +47 -0
  186. package/dist/enterprise/training/training-instructor.mcp-tools.d.ts.map +1 -0
  187. package/dist/enterprise/training/training-instructor.mcp-tools.js +275 -0
  188. package/dist/enterprise/training/training-instructor.mcp-tools.js.map +1 -0
  189. package/dist/enterprise/training/training-student.controller.d.ts +24 -0
  190. package/dist/enterprise/training/training-student.controller.d.ts.map +1 -1
  191. package/dist/enterprise/training/training-student.controller.js +22 -0
  192. package/dist/enterprise/training/training-student.controller.js.map +1 -1
  193. package/dist/enterprise/training/training-student.mcp-tools.d.ts +27 -0
  194. package/dist/enterprise/training/training-student.mcp-tools.d.ts.map +1 -0
  195. package/dist/enterprise/training/training-student.mcp-tools.js +186 -0
  196. package/dist/enterprise/training/training-student.mcp-tools.js.map +1 -0
  197. package/dist/enterprise/training/training-student.service.d.ts +32 -0
  198. package/dist/enterprise/training/training-student.service.d.ts.map +1 -1
  199. package/dist/enterprise/training/training-student.service.js +138 -0
  200. package/dist/enterprise/training/training-student.service.js.map +1 -1
  201. package/dist/evaluation/evaluation.mcp-tools.d.ts +25 -0
  202. package/dist/evaluation/evaluation.mcp-tools.d.ts.map +1 -0
  203. package/dist/evaluation/evaluation.mcp-tools.js +220 -0
  204. package/dist/evaluation/evaluation.mcp-tools.js.map +1 -0
  205. package/dist/evaluation/evaluation.module.d.ts.map +1 -1
  206. package/dist/evaluation/evaluation.module.js +2 -1
  207. package/dist/evaluation/evaluation.module.js.map +1 -1
  208. package/dist/exam/dto/create-exam-question.dto.d.ts +2 -0
  209. package/dist/exam/dto/create-exam-question.dto.d.ts.map +1 -1
  210. package/dist/exam/dto/create-exam-question.dto.js +10 -0
  211. package/dist/exam/dto/create-exam-question.dto.js.map +1 -1
  212. package/dist/exam/dto/create-exam.dto.d.ts +2 -0
  213. package/dist/exam/dto/create-exam.dto.d.ts.map +1 -1
  214. package/dist/exam/dto/create-exam.dto.js +10 -0
  215. package/dist/exam/dto/create-exam.dto.js.map +1 -1
  216. package/dist/exam/dto/create-question-subject.dto.d.ts +5 -0
  217. package/dist/exam/dto/create-question-subject.dto.d.ts.map +1 -0
  218. package/dist/exam/dto/create-question-subject.dto.js +28 -0
  219. package/dist/exam/dto/create-question-subject.dto.js.map +1 -0
  220. package/dist/exam/exam-attempt.controller.d.ts +4 -0
  221. package/dist/exam/exam-attempt.controller.d.ts.map +1 -1
  222. package/dist/exam/exam-attempt.service.d.ts +7 -1
  223. package/dist/exam/exam-attempt.service.d.ts.map +1 -1
  224. package/dist/exam/exam-attempt.service.js +47 -17
  225. package/dist/exam/exam-attempt.service.js.map +1 -1
  226. package/dist/exam/exam.controller.d.ts +34 -0
  227. package/dist/exam/exam.controller.d.ts.map +1 -1
  228. package/dist/exam/exam.controller.js +27 -0
  229. package/dist/exam/exam.controller.js.map +1 -1
  230. package/dist/exam/exam.mcp-tools.d.ts +62 -0
  231. package/dist/exam/exam.mcp-tools.d.ts.map +1 -0
  232. package/dist/exam/exam.mcp-tools.js +430 -0
  233. package/dist/exam/exam.mcp-tools.js.map +1 -0
  234. package/dist/exam/exam.module.d.ts.map +1 -1
  235. package/dist/exam/exam.module.js +2 -1
  236. package/dist/exam/exam.module.js.map +1 -1
  237. package/dist/exam/exam.service.d.ts +38 -0
  238. package/dist/exam/exam.service.d.ts.map +1 -1
  239. package/dist/exam/exam.service.js +114 -17
  240. package/dist/exam/exam.service.js.map +1 -1
  241. package/dist/index.d.ts +9 -0
  242. package/dist/index.d.ts.map +1 -1
  243. package/dist/index.js +9 -0
  244. package/dist/index.js.map +1 -1
  245. package/dist/instructor/instructor.mcp-tools.d.ts +41 -0
  246. package/dist/instructor/instructor.mcp-tools.d.ts.map +1 -0
  247. package/dist/instructor/instructor.mcp-tools.js +326 -0
  248. package/dist/instructor/instructor.mcp-tools.js.map +1 -0
  249. package/dist/instructor/instructor.module.d.ts.map +1 -1
  250. package/dist/instructor/instructor.module.js +2 -1
  251. package/dist/instructor/instructor.module.js.map +1 -1
  252. package/dist/lms.module.d.ts.map +1 -1
  253. package/dist/lms.module.js +15 -0
  254. package/dist/lms.module.js.map +1 -1
  255. package/dist/realtime/lms-realtime.controller.d.ts +7 -0
  256. package/dist/realtime/lms-realtime.controller.d.ts.map +1 -0
  257. package/dist/realtime/lms-realtime.controller.js +34 -0
  258. package/dist/realtime/lms-realtime.controller.js.map +1 -0
  259. package/dist/realtime/lms-realtime.module.d.ts +3 -0
  260. package/dist/realtime/lms-realtime.module.d.ts.map +1 -0
  261. package/dist/realtime/lms-realtime.module.js +25 -0
  262. package/dist/realtime/lms-realtime.module.js.map +1 -0
  263. package/dist/realtime/lms-realtime.service.d.ts +36 -0
  264. package/dist/realtime/lms-realtime.service.d.ts.map +1 -0
  265. package/dist/realtime/lms-realtime.service.js +59 -0
  266. package/dist/realtime/lms-realtime.service.js.map +1 -0
  267. package/dist/realtime/lms-realtime.subscriber.d.ts +10 -0
  268. package/dist/realtime/lms-realtime.subscriber.d.ts.map +1 -0
  269. package/dist/realtime/lms-realtime.subscriber.js +70 -0
  270. package/dist/realtime/lms-realtime.subscriber.js.map +1 -0
  271. package/dist/reports/reports.mcp-tools.d.ts +10 -0
  272. package/dist/reports/reports.mcp-tools.d.ts.map +1 -0
  273. package/dist/reports/reports.mcp-tools.js +50 -0
  274. package/dist/reports/reports.mcp-tools.js.map +1 -0
  275. package/dist/reports/reports.module.d.ts.map +1 -1
  276. package/dist/reports/reports.module.js +2 -1
  277. package/dist/reports/reports.module.js.map +1 -1
  278. package/dist/training/training.mcp-tools.d.ts +20 -0
  279. package/dist/training/training.mcp-tools.d.ts.map +1 -0
  280. package/dist/training/training.mcp-tools.js +181 -0
  281. package/dist/training/training.mcp-tools.js.map +1 -0
  282. package/dist/training/training.module.d.ts.map +1 -1
  283. package/dist/training/training.module.js +2 -1
  284. package/dist/training/training.module.js.map +1 -1
  285. package/hedhog/data/integration_event_catalog.yaml +69 -0
  286. package/hedhog/data/menu.yaml +34 -0
  287. package/hedhog/data/route.yaml +2351 -0
  288. package/hedhog/frontend/app/_components/class-form-sheet.tsx.ejs +168 -103
  289. package/hedhog/frontend/app/_components/course-form-sheet.tsx.ejs +80 -1
  290. package/hedhog/frontend/app/_components/course-picker.tsx.ejs +228 -0
  291. package/hedhog/frontend/app/_lib/hooks/use-lms-realtime-refresh.ts.ejs +58 -0
  292. package/hedhog/frontend/app/achievements/page.tsx.ejs +844 -0
  293. package/hedhog/frontend/app/bitcodes/page.tsx.ejs +1010 -0
  294. package/hedhog/frontend/app/certificates/issued/page.tsx.ejs +61 -2
  295. package/hedhog/frontend/app/classes/[id]/page.tsx.ejs +7 -0
  296. package/hedhog/frontend/app/classes/page.tsx.ejs +55 -2060
  297. package/hedhog/frontend/app/courses/[id]/_components/CourseRelationsCard.tsx.ejs +28 -0
  298. package/hedhog/frontend/app/courses/[id]/_components/course-edit-types.ts.ejs +1 -0
  299. package/hedhog/frontend/app/courses/[id]/page.tsx.ejs +0 -9
  300. package/hedhog/frontend/app/courses/[id]/structure/_components/course-tree-dnd.tsx.ejs +80 -66
  301. package/hedhog/frontend/app/courses/[id]/structure/_components/editor-course.tsx.ejs +583 -8
  302. package/hedhog/frontend/app/courses/[id]/structure/_components/editor-lesson.tsx.ejs +527 -57
  303. package/hedhog/frontend/app/courses/[id]/structure/_components/mock-data.ts.ejs +1 -1
  304. package/hedhog/frontend/app/courses/[id]/structure/_components/tree-context-menu.tsx.ejs +106 -4
  305. package/hedhog/frontend/app/courses/[id]/structure/_components/types.ts.ejs +2 -1
  306. package/hedhog/frontend/app/courses/[id]/structure/_data/adapters/course-structure.adapter.ts.ejs +11 -1
  307. package/hedhog/frontend/app/courses/[id]/structure/_data/services/course-structure.service.ts.ejs +53 -6
  308. package/hedhog/frontend/app/courses/[id]/structure/_data/types/api-course.types.ts.ejs +13 -2
  309. package/hedhog/frontend/app/courses/page.tsx.ejs +175 -29
  310. package/hedhog/frontend/app/enterprise/_components/enterprise-course-create-sheet.tsx.ejs +3 -0
  311. package/hedhog/frontend/app/enterprise/_components/enterprise-course-edit-sheet.tsx.ejs +7 -0
  312. package/hedhog/frontend/app/exams/[id]/questions/page.tsx.ejs +169 -2
  313. package/hedhog/frontend/app/exams/page.tsx.ejs +77 -22
  314. package/hedhog/frontend/app/instructor-skills/page.tsx.ejs +1 -0
  315. package/hedhog/frontend/app/instructors/page.tsx.ejs +1 -0
  316. package/hedhog/frontend/app/paths/page.tsx.ejs +6 -24
  317. package/hedhog/frontend/app/training/page.tsx.ejs +6 -24
  318. package/hedhog/frontend/messages/en.json +314 -12
  319. package/hedhog/frontend/messages/pt.json +314 -12
  320. package/hedhog/query/triggers.sql +53 -0
  321. package/hedhog/table/achievement.yaml +46 -0
  322. package/hedhog/table/bitcode_wallet.yaml +18 -0
  323. package/hedhog/table/bitcode_wallet_transaction.yaml +22 -0
  324. package/hedhog/table/certificate.yaml +3 -0
  325. package/hedhog/table/course.yaml +4 -0
  326. package/hedhog/table/course_file.yaml +23 -0
  327. package/hedhog/table/course_lesson.yaml +5 -0
  328. package/hedhog/table/course_lesson_discussion_like.yaml +21 -0
  329. package/hedhog/table/course_lesson_discussion_topic.yaml +35 -0
  330. package/hedhog/table/course_lesson_note.yaml +34 -0
  331. package/hedhog/table/exam.yaml +5 -0
  332. package/hedhog/table/learning_path_enrollment.yaml +6 -0
  333. package/hedhog/table/question.yaml +10 -0
  334. package/hedhog/table/question_subject.yaml +17 -0
  335. package/hedhog/table/student_activity_streak.yaml +25 -0
  336. package/package.json +6 -6
  337. package/src/achievement/achievement.controller.ts +60 -0
  338. package/src/achievement/achievement.mcp-tools.ts +108 -0
  339. package/src/achievement/achievement.module.ts +13 -0
  340. package/src/achievement/achievement.service.ts +252 -0
  341. package/src/achievement/dto/create-achievement.dto.ts +50 -0
  342. package/src/achievement/dto/update-achievement.dto.ts +47 -0
  343. package/src/bitcode-wallet/bitcode-wallet.controller.ts +69 -0
  344. package/src/bitcode-wallet/bitcode-wallet.mcp-tools.ts +107 -0
  345. package/src/bitcode-wallet/bitcode-wallet.module.ts +13 -0
  346. package/src/bitcode-wallet/bitcode-wallet.service.ts +361 -0
  347. package/src/bitcode-wallet/dto/create-bitcode-wallet-transaction.dto.ts +27 -0
  348. package/src/bitcode-wallet/dto/create-bitcode-wallet.dto.ts +7 -0
  349. package/src/bitcode-wallet/dto/update-bitcode-wallet-transaction.dto.ts +28 -0
  350. package/src/bitcode-wallet/dto/update-bitcode-wallet.dto.ts +8 -0
  351. package/src/certificate/certificate.controller.ts +20 -11
  352. package/src/certificate/certificate.mcp-tools.ts +131 -0
  353. package/src/certificate/certificate.module.ts +2 -1
  354. package/src/certificate/certificate.service.ts +95 -4
  355. package/src/certificate/dto/update-certificate-public-access.dto.ts +6 -0
  356. package/src/class-group/class-group.mcp-tools.ts +435 -0
  357. package/src/class-group/class-group.module.ts +2 -1
  358. package/src/class-group/class-group.service.ts +51 -1
  359. package/src/course/course-operations-integration.service.ts +520 -0
  360. package/src/course/course-structure.controller.ts +22 -8
  361. package/src/course/course-structure.service.ts +215 -23
  362. package/src/course/course.mcp-tools.ts +409 -0
  363. package/src/course/course.module.ts +8 -1
  364. package/src/course/course.service.ts +106 -27
  365. package/src/course/dto/create-course.dto.ts +8 -0
  366. package/src/course/dto/update-course-resources.dto.ts +39 -0
  367. package/src/course-lesson-discussion/course-lesson-discussion.controller.ts +55 -0
  368. package/src/course-lesson-discussion/course-lesson-discussion.mcp-tools.ts +75 -0
  369. package/src/course-lesson-discussion/course-lesson-discussion.module.ts +13 -0
  370. package/src/course-lesson-discussion/course-lesson-discussion.service.ts +354 -0
  371. package/src/course-lesson-discussion/dto/create-course-lesson-discussion-topic.dto.ts +16 -0
  372. package/src/course-lesson-note/course-lesson-note.controller.ts +68 -0
  373. package/src/course-lesson-note/course-lesson-note.mcp-tools.ts +96 -0
  374. package/src/course-lesson-note/course-lesson-note.module.ts +13 -0
  375. package/src/course-lesson-note/course-lesson-note.service.ts +248 -0
  376. package/src/course-lesson-note/dto/create-course-lesson-note.dto.ts +16 -0
  377. package/src/course-lesson-note/dto/update-course-lesson-note.dto.ts +18 -0
  378. package/src/dashboard/dashboard.mcp-tools.ts +23 -0
  379. package/src/dashboard/dashboard.module.ts +2 -1
  380. package/src/enterprise/enterprise.mcp-tools.ts +403 -0
  381. package/src/enterprise/enterprise.module.ts +2 -1
  382. package/src/enterprise/training/enterprise-training.module.ts +11 -1
  383. package/src/enterprise/training/training-admin.mcp-tools.ts +479 -0
  384. package/src/enterprise/training/training-instructor.mcp-tools.ts +210 -0
  385. package/src/enterprise/training/training-student.controller.ts +17 -1
  386. package/src/enterprise/training/training-student.mcp-tools.ts +136 -0
  387. package/src/enterprise/training/training-student.service.ts +167 -1
  388. package/src/evaluation/evaluation.mcp-tools.ts +155 -0
  389. package/src/evaluation/evaluation.module.ts +2 -1
  390. package/src/exam/dto/create-exam-question.dto.ts +8 -0
  391. package/src/exam/dto/create-exam.dto.ts +8 -0
  392. package/src/exam/dto/create-question-subject.dto.ts +12 -0
  393. package/src/exam/exam-attempt.service.ts +46 -14
  394. package/src/exam/exam.controller.ts +19 -0
  395. package/src/exam/exam.mcp-tools.ts +337 -0
  396. package/src/exam/exam.module.ts +2 -1
  397. package/src/exam/exam.service.ts +121 -0
  398. package/src/index.ts +9 -0
  399. package/src/instructor/instructor.mcp-tools.ts +243 -0
  400. package/src/instructor/instructor.module.ts +2 -1
  401. package/src/lms.module.ts +15 -1
  402. package/src/realtime/lms-realtime.controller.ts +12 -0
  403. package/src/realtime/lms-realtime.module.ts +12 -0
  404. package/src/realtime/lms-realtime.service.ts +98 -0
  405. package/src/realtime/lms-realtime.subscriber.ts +61 -0
  406. package/src/reports/reports.mcp-tools.ts +27 -0
  407. package/src/reports/reports.module.ts +2 -1
  408. package/src/training/training.mcp-tools.ts +128 -0
  409. package/src/training/training.module.ts +2 -1
@@ -1,12 +1,14 @@
1
1
  import { PrismaService } from '@hed-hog/api-prisma';
2
2
  import { BadRequestException, Injectable, NotFoundException } from '@nestjs/common';
3
3
  import { InstructorService } from '../instructor/instructor.service';
4
+ import { CourseOperationsIntegrationService } from './course-operations-integration.service';
4
5
  import { CreateCourseStructureLessonDto } from './dto/create-course-structure-lesson.dto';
5
6
  import { CreateCourseStructureSessionDto } from './dto/create-course-structure-session.dto';
6
7
  import { MoveLessonDto } from './dto/move-lesson.dto';
7
8
  import { PasteLessonsDto } from './dto/paste-lessons.dto';
8
9
  import { ReorderLessonsDto } from './dto/reorder-lessons.dto';
9
10
  import { ReorderSessionsDto } from './dto/reorder-sessions.dto';
11
+ import { UpdateCourseResourcesDto } from './dto/update-course-resources.dto';
10
12
  import { UpdateCourseStructureLessonDto } from './dto/update-course-structure-lesson.dto';
11
13
  import { UpdateCourseStructureSessionDto } from './dto/update-course-structure-session.dto';
12
14
 
@@ -18,12 +20,16 @@ export class CourseStructureService {
18
20
  constructor(
19
21
  private readonly prisma: PrismaService,
20
22
  private readonly instructorService: InstructorService,
23
+ private readonly operationsIntegration: CourseOperationsIntegrationService,
21
24
  ) {}
22
25
 
23
26
  async getStructure(courseId: number) {
24
27
  await this.ensureCourseExists(courseId);
25
28
 
26
- const [modules, instructors, courseRecord] = await Promise.all([
29
+ const courseResources = await this.getCourseResources(courseId);
30
+
31
+ const [modules, instructors, courseRecord, courseProjectLinks] =
32
+ await Promise.all([
27
33
  this.prisma.course_module.findMany({
28
34
  where: { course_id: courseId },
29
35
  orderBy: { order: 'asc' },
@@ -56,9 +62,22 @@ export class CourseStructureService {
56
62
  this.instructorService.listQualifiedInstructorOptions(['course-lessons']),
57
63
  this.prisma.course.findUnique({
58
64
  where: { id: courseId },
59
- select: { id: true, slug: true, title: true, description: true },
65
+ select: {
66
+ id: true,
67
+ name: true,
68
+ slug: true,
69
+ title: true,
70
+ description: true,
71
+ offering_type: true,
72
+ },
60
73
  }),
61
- ]);
74
+ this.operationsIntegration.getCourseProjectLinks([courseId]),
75
+ ]);
76
+
77
+ const lessonTaskLinks = await this.operationsIntegration.getLessonTaskLinks(
78
+ modules.flatMap((module) => module.course_lesson.map((lesson) => lesson.id)),
79
+ );
80
+ const courseProject = courseProjectLinks.get(courseId);
62
81
 
63
82
  const sessoes = modules.map((module, index) => ({
64
83
  id: String(module.id),
@@ -105,6 +124,10 @@ export class CourseStructureService {
105
124
  role: item.role,
106
125
  nome: this.personName(item.instructor?.person),
107
126
  })),
127
+ operationsTaskId: lessonTaskLinks.get(lesson.id)?.taskId ?? null,
128
+ operationsTaskName: lessonTaskLinks.get(lesson.id)?.taskName ?? null,
129
+ operationsTaskStatus:
130
+ lessonTaskLinks.get(lesson.id)?.taskStatus ?? null,
108
131
  };
109
132
  }),
110
133
  );
@@ -119,14 +142,63 @@ export class CourseStructureService {
119
142
  curso: courseRecord
120
143
  ? {
121
144
  id: String(courseRecord.id),
145
+ name: courseRecord.name ?? '',
122
146
  slug: courseRecord.slug ?? '',
123
147
  titulo: courseRecord.title,
124
148
  descricao: courseRecord.description ?? '',
149
+ offeringType: courseRecord.offering_type ?? 'on_demand',
150
+ recursos: courseResources,
151
+ operationsProjectId: courseProject?.projectId ?? null,
152
+ operationsProjectCode: courseProject?.projectCode ?? null,
153
+ operationsProjectName: courseProject?.projectName ?? null,
125
154
  }
126
155
  : null,
127
156
  };
128
157
  }
129
158
 
159
+ async getCourseResources(courseId: number) {
160
+ await this.ensureCourseExists(courseId);
161
+
162
+ const rows = await this.prisma.$queryRaw<
163
+ Array<{ id: number; title: string; file_id: number | null }>
164
+ >`
165
+ SELECT id, title, file_id
166
+ FROM course_file
167
+ WHERE course_id = ${courseId}
168
+ ORDER BY id DESC
169
+ `;
170
+
171
+ return rows.map((row) => ({
172
+ id: row.id,
173
+ nome: row.title,
174
+ fileId: row.file_id,
175
+ tipo: 'file',
176
+ publico: true,
177
+ }));
178
+ }
179
+
180
+ async updateCourseResources(courseId: number, dto: UpdateCourseResourcesDto) {
181
+ await this.ensureCourseExists(courseId);
182
+
183
+ const recursos = dto.recursos ?? [];
184
+
185
+ await this.prisma.$transaction(async (tx) => {
186
+ await tx.$executeRaw`
187
+ DELETE FROM course_file
188
+ WHERE course_id = ${courseId}
189
+ `;
190
+
191
+ for (const recurso of recursos) {
192
+ await tx.$executeRaw`
193
+ INSERT INTO course_file (course_id, title, file_id)
194
+ VALUES (${courseId}, ${recurso.nome}, ${recurso.fileId ?? null})
195
+ `;
196
+ }
197
+ });
198
+
199
+ return this.getCourseResources(courseId);
200
+ }
201
+
130
202
  async createSession(courseId: number, dto: CreateCourseStructureSessionDto) {
131
203
  await this.ensureCourseExists(courseId);
132
204
  const nextOrder = await this.nextModuleOrder(courseId);
@@ -157,6 +229,13 @@ export class CourseStructureService {
157
229
  ) {
158
230
  const module = await this.prisma.course_module.findFirst({
159
231
  where: { id: sessionId, course_id: courseId },
232
+ include: {
233
+ course: {
234
+ select: {
235
+ title: true,
236
+ },
237
+ },
238
+ },
160
239
  });
161
240
 
162
241
  if (!module) {
@@ -184,6 +263,13 @@ export class CourseStructureService {
184
263
  async deleteSession(courseId: number, sessionId: number) {
185
264
  const module = await this.prisma.course_module.findFirst({
186
265
  where: { id: sessionId, course_id: courseId },
266
+ include: {
267
+ course: {
268
+ select: {
269
+ title: true,
270
+ },
271
+ },
272
+ },
187
273
  });
188
274
 
189
275
  if (!module) {
@@ -202,28 +288,54 @@ export class CourseStructureService {
202
288
  ) {
203
289
  const module = await this.prisma.course_module.findFirst({
204
290
  where: { id: sessionId, course_id: courseId },
291
+ include: {
292
+ course: {
293
+ select: {
294
+ title: true,
295
+ },
296
+ },
297
+ },
205
298
  });
206
299
 
207
300
  if (!module) {
208
301
  throw new NotFoundException('Session not found for this course');
209
302
  }
210
303
 
211
- const nextOrder = await this.nextLessonOrder(sessionId);
212
- const mappedType = this.mapUiTypeToDbType(dto.tipo);
304
+ const created = await this.prisma.$transaction(async (tx) => {
305
+ const nextOrder = await this.nextLessonOrder(sessionId, tx);
306
+ const mappedType = this.mapUiTypeToDbType(dto.tipo);
213
307
 
214
- const created = await this.prisma.course_lesson.create({
215
- data: {
216
- course_module_id: sessionId,
217
- title: dto.titulo,
218
- description: dto.descricaoPublica ?? null,
219
- type: mappedType,
220
- duration_seconds: dto.duracao * 60,
221
- order: nextOrder,
222
- content: this.serializeContent(dto),
223
- },
224
- });
308
+ const lesson = await tx.course_lesson.create({
309
+ data: {
310
+ course_module_id: sessionId,
311
+ title: dto.titulo,
312
+ description: dto.descricaoPublica ?? null,
313
+ type: mappedType,
314
+ duration_seconds: dto.duracao * 60,
315
+ order: nextOrder,
316
+ content: this.serializeContent(dto),
317
+ },
318
+ });
225
319
 
226
- await this.syncLessonRelations(created.id, dto);
320
+ await this.syncLessonRelations(lesson.id, dto, tx);
321
+
322
+ const projectLinks = await this.operationsIntegration.getCourseProjectLinks(
323
+ [courseId],
324
+ tx,
325
+ );
326
+
327
+ await this.operationsIntegration.createTaskForLesson(tx, {
328
+ courseId,
329
+ lessonId: lesson.id,
330
+ projectId: projectLinks.get(courseId)?.projectId ?? null,
331
+ courseTitle: module.course?.title ?? null,
332
+ sessionTitle: module.title,
333
+ lessonTitle: dto.titulo,
334
+ lessonDescription: dto.descricaoPublica ?? null,
335
+ });
336
+
337
+ return lesson;
338
+ });
227
339
 
228
340
  return this.getLessonById(created.id);
229
341
  }
@@ -271,6 +383,7 @@ export class CourseStructureService {
271
383
  });
272
384
 
273
385
  await this.syncLessonRelations(lessonId, dto);
386
+ await this.operationsIntegration.syncTaskForLesson(lessonId);
274
387
 
275
388
  return this.getLessonById(updated.id);
276
389
  }
@@ -440,6 +553,11 @@ export class CourseStructureService {
440
553
  const sourceModule = await this.prisma.course_module.findFirst({
441
554
  where: { id: sessionId, course_id: courseId },
442
555
  include: {
556
+ course: {
557
+ select: {
558
+ title: true,
559
+ },
560
+ },
443
561
  course_lesson: {
444
562
  orderBy: { order: 'asc' },
445
563
  include: {
@@ -468,6 +586,10 @@ export class CourseStructureService {
468
586
  });
469
587
 
470
588
  const newLessons = [];
589
+ const projectLinks = await this.operationsIntegration.getCourseProjectLinks([
590
+ courseId,
591
+ ]);
592
+ const projectId = projectLinks.get(courseId)?.projectId ?? null;
471
593
  for (const lesson of sourceModule.course_lesson) {
472
594
  const lessonOrder = await this.nextLessonOrder(newModule.id);
473
595
  const newLesson = await this.prisma.course_lesson.create({
@@ -512,6 +634,16 @@ export class CourseStructureService {
512
634
  });
513
635
  }
514
636
 
637
+ await this.operationsIntegration.createTaskForLesson(this.prisma, {
638
+ courseId,
639
+ lessonId: newLesson.id,
640
+ projectId,
641
+ courseTitle: sourceModule.course?.title ?? null,
642
+ sessionTitle: newModule.title,
643
+ lessonTitle: newLesson.title,
644
+ lessonDescription: newLesson.description,
645
+ });
646
+
515
647
  newLessons.push(await this.getLessonById(newLesson.id));
516
648
  }
517
649
 
@@ -535,6 +667,16 @@ export class CourseStructureService {
535
667
  course_module: { course_id: courseId },
536
668
  },
537
669
  include: {
670
+ course_module: {
671
+ select: {
672
+ title: true,
673
+ course: {
674
+ select: {
675
+ title: true,
676
+ },
677
+ },
678
+ },
679
+ },
538
680
  course_lesson_file: true,
539
681
  course_lesson_question: true,
540
682
  course_lesson_instructor: true,
@@ -546,6 +688,10 @@ export class CourseStructureService {
546
688
  }
547
689
 
548
690
  const nextOrder = await this.nextLessonOrder(sessionId);
691
+ const projectLinks = await this.operationsIntegration.getCourseProjectLinks([
692
+ courseId,
693
+ ]);
694
+ const projectId = projectLinks.get(courseId)?.projectId ?? null;
549
695
 
550
696
  const newLesson = await this.prisma.course_lesson.create({
551
697
  data: {
@@ -589,6 +735,16 @@ export class CourseStructureService {
589
735
  });
590
736
  }
591
737
 
738
+ await this.operationsIntegration.createTaskForLesson(this.prisma, {
739
+ courseId,
740
+ lessonId: newLesson.id,
741
+ projectId,
742
+ courseTitle: sourceLesson.course_module?.course?.title ?? null,
743
+ sessionTitle: sourceLesson.course_module?.title ?? null,
744
+ lessonTitle: newLesson.title,
745
+ lessonDescription: newLesson.description,
746
+ });
747
+
592
748
  return this.getLessonById(newLesson.id);
593
749
  }
594
750
 
@@ -619,6 +775,10 @@ export class CourseStructureService {
619
775
  }
620
776
 
621
777
  const result = [];
778
+ const projectLinks = await this.operationsIntegration.getCourseProjectLinks([
779
+ courseId,
780
+ ]);
781
+ const projectId = projectLinks.get(courseId)?.projectId ?? null;
622
782
  for (const lesson of sourceLessons) {
623
783
  const lessonOrder = await this.nextLessonOrder(targetSessionId);
624
784
  const newLesson = await this.prisma.course_lesson.create({
@@ -663,19 +823,30 @@ export class CourseStructureService {
663
823
  });
664
824
  }
665
825
 
826
+ await this.operationsIntegration.createTaskForLesson(this.prisma, {
827
+ courseId,
828
+ lessonId: newLesson.id,
829
+ projectId,
830
+ sessionTitle: targetModule.title,
831
+ lessonTitle: newLesson.title,
832
+ lessonDescription: newLesson.description,
833
+ });
834
+
666
835
  result.push(await this.getLessonById(newLesson.id));
667
836
  }
668
837
 
669
838
  return { lessons: result };
670
839
  }
671
840
 
672
- private async syncLessonRelations( lessonId: number,
841
+ private async syncLessonRelations(
842
+ lessonId: number,
673
843
  dto: Partial<
674
844
  Pick<
675
845
  CreateCourseStructureLessonDto,
676
846
  'tipo' | 'exameVinculado' | 'instructorIds' | 'recursos'
677
847
  >
678
848
  >,
849
+ client: any = this.prisma,
679
850
  ) {
680
851
  const instructorIds = [...new Set(dto.instructorIds ?? [])];
681
852
 
@@ -686,7 +857,7 @@ export class CourseStructureService {
686
857
  );
687
858
  }
688
859
 
689
- await this.prisma.$transaction(async (tx) => {
860
+ const syncWithClient = async (tx: any) => {
690
861
  await tx.course_lesson_instructor.deleteMany({
691
862
  where: { course_lesson_id: lessonId },
692
863
  });
@@ -729,7 +900,14 @@ export class CourseStructureService {
729
900
  },
730
901
  });
731
902
  }
732
- });
903
+ };
904
+
905
+ if (typeof client?.$transaction === 'function') {
906
+ await client.$transaction(async (tx: any) => syncWithClient(tx));
907
+ return;
908
+ }
909
+
910
+ await syncWithClient(client);
733
911
  }
734
912
 
735
913
  private async getLessonById(lessonId: number) {
@@ -737,7 +915,15 @@ export class CourseStructureService {
737
915
  where: { id: lessonId },
738
916
  include: {
739
917
  course_module: {
740
- select: { id: true },
918
+ select: {
919
+ id: true,
920
+ title: true,
921
+ course: {
922
+ select: {
923
+ title: true,
924
+ },
925
+ },
926
+ },
741
927
  },
742
928
  course_lesson_file: true,
743
929
  course_lesson_question: {
@@ -764,6 +950,9 @@ export class CourseStructureService {
764
950
  throw new NotFoundException('Lesson not found');
765
951
  }
766
952
 
953
+ const taskLinks = await this.operationsIntegration.getLessonTaskLinks([
954
+ lessonId,
955
+ ]);
767
956
  const parsedContent = this.parseLessonContent(lesson.content);
768
957
  const tipo = this.mapDbTypeToUiType(lesson.type, parsedContent?.sourceType);
769
958
 
@@ -799,6 +988,9 @@ export class CourseStructureService {
799
988
  role: item.role,
800
989
  nome: this.personName(item.instructor?.person),
801
990
  })),
991
+ operationsTaskId: taskLinks.get(lessonId)?.taskId ?? null,
992
+ operationsTaskName: taskLinks.get(lessonId)?.taskName ?? null,
993
+ operationsTaskStatus: taskLinks.get(lessonId)?.taskStatus ?? null,
802
994
  };
803
995
  }
804
996
 
@@ -823,8 +1015,8 @@ export class CourseStructureService {
823
1015
  return (last?.order ?? 0) + 1;
824
1016
  }
825
1017
 
826
- private async nextLessonOrder(sessionId: number) {
827
- const last = await this.prisma.course_lesson.findFirst({
1018
+ private async nextLessonOrder(sessionId: number, client: any = this.prisma) {
1019
+ const last = await client.course_lesson.findFirst({
828
1020
  where: { course_module_id: sessionId },
829
1021
  orderBy: { order: 'desc' },
830
1022
  select: { order: true },