@hed-hog/lms 0.0.318 → 0.0.320

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 (128) hide show
  1. package/dist/class-group/class-group.controller.d.ts +65 -2
  2. package/dist/class-group/class-group.controller.d.ts.map +1 -1
  3. package/dist/class-group/class-group.controller.js +35 -0
  4. package/dist/class-group/class-group.controller.js.map +1 -1
  5. package/dist/class-group/class-group.service.d.ts +67 -2
  6. package/dist/class-group/class-group.service.d.ts.map +1 -1
  7. package/dist/class-group/class-group.service.js +164 -13
  8. package/dist/class-group/class-group.service.js.map +1 -1
  9. package/dist/class-group/dto/create-class-group.dto.d.ts.map +1 -1
  10. package/dist/class-group/dto/create-class-group.dto.js +2 -1
  11. package/dist/class-group/dto/create-class-group.dto.js.map +1 -1
  12. package/dist/class-group/dto/material.dto.d.ts +18 -0
  13. package/dist/class-group/dto/material.dto.d.ts.map +1 -0
  14. package/dist/class-group/dto/material.dto.js +86 -0
  15. package/dist/class-group/dto/material.dto.js.map +1 -0
  16. package/dist/course/course.service.d.ts +2 -0
  17. package/dist/course/course.service.d.ts.map +1 -1
  18. package/dist/course/course.service.js +27 -2
  19. package/dist/course/course.service.js.map +1 -1
  20. package/dist/course/dto/create-course.dto.d.ts +2 -2
  21. package/dist/course/dto/create-course.dto.d.ts.map +1 -1
  22. package/dist/course/dto/create-course.dto.js.map +1 -1
  23. package/dist/enterprise/enterprise.controller.d.ts +7 -1
  24. package/dist/enterprise/enterprise.controller.d.ts.map +1 -1
  25. package/dist/enterprise/enterprise.controller.js +72 -2
  26. package/dist/enterprise/enterprise.controller.js.map +1 -1
  27. package/dist/enterprise/enterprise.module.d.ts.map +1 -1
  28. package/dist/enterprise/enterprise.module.js +2 -1
  29. package/dist/enterprise/enterprise.module.js.map +1 -1
  30. package/dist/enterprise/enterprise.service.d.ts +3 -0
  31. package/dist/enterprise/enterprise.service.d.ts.map +1 -1
  32. package/dist/enterprise/enterprise.service.js +84 -1
  33. package/dist/enterprise/enterprise.service.js.map +1 -1
  34. package/dist/enterprise/training/enterprise-training.module.d.ts +3 -0
  35. package/dist/enterprise/training/enterprise-training.module.d.ts.map +1 -0
  36. package/dist/enterprise/training/enterprise-training.module.js +40 -0
  37. package/dist/enterprise/training/enterprise-training.module.js.map +1 -0
  38. package/dist/enterprise/training/training-admin.controller.d.ts +525 -0
  39. package/dist/enterprise/training/training-admin.controller.d.ts.map +1 -0
  40. package/dist/enterprise/training/training-admin.controller.js +385 -0
  41. package/dist/enterprise/training/training-admin.controller.js.map +1 -0
  42. package/dist/enterprise/training/training-admin.service.d.ts +582 -0
  43. package/dist/enterprise/training/training-admin.service.d.ts.map +1 -0
  44. package/dist/enterprise/training/training-admin.service.js +2283 -0
  45. package/dist/enterprise/training/training-admin.service.js.map +1 -0
  46. package/dist/enterprise/training/training-instructor.controller.d.ts +260 -0
  47. package/dist/enterprise/training/training-instructor.controller.d.ts.map +1 -0
  48. package/dist/enterprise/training/training-instructor.controller.js +199 -0
  49. package/dist/enterprise/training/training-instructor.controller.js.map +1 -0
  50. package/dist/enterprise/training/training-instructor.service.d.ts +280 -0
  51. package/dist/enterprise/training/training-instructor.service.d.ts.map +1 -0
  52. package/dist/enterprise/training/training-instructor.service.js +1218 -0
  53. package/dist/enterprise/training/training-instructor.service.js.map +1 -0
  54. package/dist/enterprise/training/training-student.controller.d.ts +168 -0
  55. package/dist/enterprise/training/training-student.controller.d.ts.map +1 -0
  56. package/dist/enterprise/training/training-student.controller.js +104 -0
  57. package/dist/enterprise/training/training-student.controller.js.map +1 -0
  58. package/dist/enterprise/training/training-student.service.d.ts +185 -0
  59. package/dist/enterprise/training/training-student.service.d.ts.map +1 -0
  60. package/dist/enterprise/training/training-student.service.js +674 -0
  61. package/dist/enterprise/training/training-student.service.js.map +1 -0
  62. package/dist/enterprise/training/training-viewer.controller.d.ts +298 -0
  63. package/dist/enterprise/training/training-viewer.controller.d.ts.map +1 -0
  64. package/dist/enterprise/training/training-viewer.controller.js +178 -0
  65. package/dist/enterprise/training/training-viewer.controller.js.map +1 -0
  66. package/dist/evaluation/dto/create-evaluation-topic.dto.d.ts +18 -0
  67. package/dist/evaluation/dto/create-evaluation-topic.dto.d.ts.map +1 -0
  68. package/dist/evaluation/dto/create-evaluation-topic.dto.js +59 -0
  69. package/dist/evaluation/dto/create-evaluation-topic.dto.js.map +1 -0
  70. package/dist/evaluation/dto/update-evaluation-topic.dto.d.ts +6 -0
  71. package/dist/evaluation/dto/update-evaluation-topic.dto.d.ts.map +1 -0
  72. package/dist/evaluation/dto/update-evaluation-topic.dto.js +9 -0
  73. package/dist/evaluation/dto/update-evaluation-topic.dto.js.map +1 -0
  74. package/dist/evaluation/evaluation.controller.d.ts +66 -0
  75. package/dist/evaluation/evaluation.controller.d.ts.map +1 -1
  76. package/dist/evaluation/evaluation.controller.js +73 -0
  77. package/dist/evaluation/evaluation.controller.js.map +1 -1
  78. package/dist/evaluation/evaluation.service.d.ts +71 -0
  79. package/dist/evaluation/evaluation.service.d.ts.map +1 -1
  80. package/dist/evaluation/evaluation.service.js +121 -0
  81. package/dist/evaluation/evaluation.service.js.map +1 -1
  82. package/dist/instructor/instructor.service.js +6 -6
  83. package/dist/instructor/instructor.service.js.map +1 -1
  84. package/dist/lms.module.d.ts.map +1 -1
  85. package/dist/lms.module.js +3 -0
  86. package/dist/lms.module.js.map +1 -1
  87. package/hedhog/data/menu.yaml +19 -2
  88. package/hedhog/data/route.yaml +730 -0
  89. package/hedhog/frontend/app/_components/class-form-sheet.tsx.ejs +74 -8
  90. package/hedhog/frontend/app/_components/course-avatar.tsx.ejs +27 -47
  91. package/hedhog/frontend/app/classes/[id]/_components/event-summary-popover.tsx.ejs +15 -15
  92. package/hedhog/frontend/app/classes/[id]/_components/quick-create-session-popover.tsx.ejs +5 -5
  93. package/hedhog/frontend/app/classes/[id]/page.tsx.ejs +2141 -308
  94. package/hedhog/frontend/app/classes/page.tsx.ejs +8 -7
  95. package/hedhog/frontend/app/courses/[id]/page.tsx.ejs +21 -8
  96. package/hedhog/frontend/app/courses/[id]/structure/_components/editor-course.tsx.ejs +10 -6
  97. package/hedhog/frontend/app/evaluations/_components/evaluation-topic-form-sheet.tsx.ejs +201 -0
  98. package/hedhog/frontend/app/evaluations/_components/evaluation-topic-types.ts.ejs +49 -0
  99. package/hedhog/frontend/app/evaluations/page.tsx.ejs +621 -1250
  100. package/hedhog/frontend/app/instructors/page.tsx.ejs +22 -20
  101. package/hedhog/frontend/app/reports/evaluations/page.tsx.ejs +1278 -0
  102. package/hedhog/frontend/messages/en.json +98 -7
  103. package/hedhog/frontend/messages/pt.json +98 -7
  104. package/hedhog/table/course_class_group_material.yaml +45 -0
  105. package/package.json +5 -5
  106. package/src/class-group/class-group.controller.ts +30 -0
  107. package/src/class-group/class-group.service.ts +176 -5
  108. package/src/class-group/dto/create-class-group.dto.ts +8 -8
  109. package/src/class-group/dto/material.dto.ts +69 -0
  110. package/src/course/course.service.ts +54 -21
  111. package/src/course/dto/create-course.dto.ts +8 -8
  112. package/src/enterprise/enterprise.controller.ts +62 -1
  113. package/src/enterprise/enterprise.module.ts +2 -1
  114. package/src/enterprise/enterprise.service.ts +84 -1
  115. package/src/enterprise/training/enterprise-training.module.ts +27 -0
  116. package/src/enterprise/training/training-admin.controller.ts +278 -0
  117. package/src/enterprise/training/training-admin.service.ts +2523 -0
  118. package/src/enterprise/training/training-instructor.controller.ts +141 -0
  119. package/src/enterprise/training/training-instructor.service.ts +1303 -0
  120. package/src/enterprise/training/training-student.controller.ts +65 -0
  121. package/src/enterprise/training/training-student.service.ts +762 -0
  122. package/src/enterprise/training/training-viewer.controller.ts +115 -0
  123. package/src/evaluation/dto/create-evaluation-topic.dto.ts +48 -0
  124. package/src/evaluation/dto/update-evaluation-topic.dto.ts +6 -0
  125. package/src/evaluation/evaluation.controller.ts +63 -1
  126. package/src/evaluation/evaluation.service.ts +150 -1
  127. package/src/instructor/instructor.service.ts +4 -4
  128. package/src/lms.module.ts +3 -0
@@ -0,0 +1,278 @@
1
+ import { Role, User } from '@hed-hog/api';
2
+ import { Body, Controller, Delete, Get, Param, ParseIntPipe, Patch, Post, Query } from '@nestjs/common';
3
+ import { TrainingAdminService } from './training-admin.service';
4
+
5
+ @Role()
6
+ @Controller('lms/enterprise/training/admin')
7
+ export class TrainingAdminController {
8
+ constructor(private readonly trainingAdminService: TrainingAdminService) {}
9
+
10
+ @Get()
11
+ getDashboard(
12
+ @User('id') userId: number,
13
+ @Query('enterpriseId', new ParseIntPipe({ optional: true })) enterpriseId?: number,
14
+ ) {
15
+ return this.trainingAdminService.getDashboard(userId, enterpriseId);
16
+ }
17
+
18
+ @Get('courses/stats')
19
+ getCourseStats(
20
+ @User('id') userId: number,
21
+ @Query('enterpriseId', new ParseIntPipe({ optional: true })) enterpriseId?: number,
22
+ ) {
23
+ return this.trainingAdminService.getCourseStats(userId, enterpriseId);
24
+ }
25
+
26
+ @Get('courses/:courseId')
27
+ getCourseDetail(
28
+ @User('id') userId: number,
29
+ @Param('courseId', ParseIntPipe) courseId: number,
30
+ @Query('enterpriseId', new ParseIntPipe({ optional: true })) enterpriseId?: number,
31
+ ) {
32
+ return this.trainingAdminService.getCourseDetail(userId, courseId, enterpriseId);
33
+ }
34
+
35
+ @Get('courses')
36
+ getCourses(
37
+ @User('id') userId: number,
38
+ @Query('enterpriseId', new ParseIntPipe({ optional: true })) enterpriseId?: number,
39
+ @Query('page', new ParseIntPipe({ optional: true })) page?: number,
40
+ @Query('pageSize', new ParseIntPipe({ optional: true })) pageSize?: number,
41
+ @Query('search') search?: string,
42
+ @Query('level') level?: string,
43
+ @Query('category') category?: string,
44
+ ) {
45
+ return this.trainingAdminService.getCourses(userId, { enterpriseId, page, pageSize, search, level, category });
46
+ }
47
+
48
+ @Get('class-groups')
49
+ getClassGroups(
50
+ @User('id') userId: number,
51
+ @Query('enterpriseId', new ParseIntPipe({ optional: true })) enterpriseId?: number,
52
+ @Query('search') search?: string,
53
+ @Query('status') status?: string,
54
+ @Query('deliveryMode') deliveryMode?: string,
55
+ @Query('instructorId', new ParseIntPipe({ optional: true })) instructorId?: number,
56
+ ) {
57
+ return this.trainingAdminService.getClassGroups(userId, {
58
+ enterpriseId,
59
+ search,
60
+ status,
61
+ deliveryMode,
62
+ instructorId,
63
+ });
64
+ }
65
+
66
+ @Get('class-groups/:id')
67
+ getClassGroupDetail(
68
+ @User('id') userId: number,
69
+ @Param('id', ParseIntPipe) classGroupId: number,
70
+ ) {
71
+ return this.trainingAdminService.getClassGroupDetail(userId, classGroupId);
72
+ }
73
+
74
+ @Get('class-groups/:id/students')
75
+ getClassGroupStudents(
76
+ @User('id') userId: number,
77
+ @Param('id', ParseIntPipe) classGroupId: number,
78
+ @Query('page', new ParseIntPipe({ optional: true })) page?: number,
79
+ @Query('pageSize', new ParseIntPipe({ optional: true })) pageSize?: number,
80
+ @Query('search') search?: string,
81
+ @Query('status') status?: string,
82
+ ) {
83
+ return this.trainingAdminService.getClassGroupStudents(userId, classGroupId, {
84
+ page,
85
+ pageSize,
86
+ search,
87
+ status,
88
+ });
89
+ }
90
+
91
+ @Get('class-groups/:id/sessions')
92
+ getClassGroupSessions(
93
+ @User('id') userId: number,
94
+ @Param('id', ParseIntPipe) classGroupId: number,
95
+ ) {
96
+ return this.trainingAdminService.getClassGroupSessions(userId, classGroupId);
97
+ }
98
+
99
+ @Get('class-groups/:id/materials')
100
+ getClassGroupMaterials(
101
+ @User('id') userId: number,
102
+ @Param('id', ParseIntPipe) classGroupId: number,
103
+ ) {
104
+ return this.trainingAdminService.getClassGroupMaterials(userId, classGroupId);
105
+ }
106
+
107
+ @Get('license-info')
108
+ getLicenseAvailability(@User('id') userId: number) {
109
+ return this.trainingAdminService.getLicenseAvailability(userId);
110
+ }
111
+
112
+ @Get('licenses')
113
+ listLicenses(
114
+ @User('id') userId: number,
115
+ @Query('page', new ParseIntPipe({ optional: true })) page?: number,
116
+ @Query('pageSize', new ParseIntPipe({ optional: true })) pageSize?: number,
117
+ @Query('search') search?: string,
118
+ @Query('status') status?: string,
119
+ @Query('department') department?: string,
120
+ ) {
121
+ return this.trainingAdminService.listLicenses(userId, { page, pageSize, search, status, department });
122
+ }
123
+
124
+ @Post('licenses')
125
+ assignLicense(
126
+ @User('id') userId: number,
127
+ @Body() dto: { name: string; email?: string; department?: string },
128
+ ) {
129
+ return this.trainingAdminService.assignLicense(userId, dto);
130
+ }
131
+
132
+ @Delete('licenses/:personId')
133
+ revokeLicense(
134
+ @User('id') userId: number,
135
+ @Param('personId', ParseIntPipe) personId: number,
136
+ ) {
137
+ return this.trainingAdminService.revokeLicense(userId, personId);
138
+ }
139
+
140
+ @Get('class-groups/:id/enrollable-students')
141
+ getEnrollableStudents(
142
+ @User('id') userId: number,
143
+ @Param('id', ParseIntPipe) classGroupId: number,
144
+ @Query('search') search?: string,
145
+ ) {
146
+ return this.trainingAdminService.getEnrollableStudents(userId, classGroupId, search);
147
+ }
148
+
149
+ @Post('class-groups/:id/enroll')
150
+ enrollExistingStudent(
151
+ @User('id') userId: number,
152
+ @Param('id', ParseIntPipe) classGroupId: number,
153
+ @Body() dto: { personId: number },
154
+ ) {
155
+ return this.trainingAdminService.enrollExistingStudent(userId, classGroupId, dto.personId);
156
+ }
157
+
158
+ @Post('class-groups/:id/enroll/create')
159
+ createAndEnrollNewStudent(
160
+ @User('id') userId: number,
161
+ @Param('id', ParseIntPipe) classGroupId: number,
162
+ @Body() dto: { name: string; email?: string; department?: string },
163
+ ) {
164
+ return this.trainingAdminService.createAndEnrollNewStudent(userId, classGroupId, dto);
165
+ }
166
+
167
+ @Get('students/stats')
168
+ getStudentStats(
169
+ @User('id') userId: number,
170
+ @Query('enterpriseId', new ParseIntPipe({ optional: true })) enterpriseId?: number,
171
+ ) {
172
+ return this.trainingAdminService.getStudentStats(userId, enterpriseId);
173
+ }
174
+
175
+ @Get('students/:personId')
176
+ getStudentDetail(
177
+ @User('id') userId: number,
178
+ @Param('personId', ParseIntPipe) personId: number,
179
+ @Query('enterpriseId', new ParseIntPipe({ optional: true })) enterpriseId?: number,
180
+ ) {
181
+ return this.trainingAdminService.getStudentDetail(userId, personId, enterpriseId);
182
+ }
183
+
184
+ @Get('students')
185
+ getStudents(
186
+ @User('id') userId: number,
187
+ @Query('enterpriseId', new ParseIntPipe({ optional: true })) enterpriseId?: number,
188
+ @Query('page', new ParseIntPipe({ optional: true })) page?: number,
189
+ @Query('pageSize', new ParseIntPipe({ optional: true })) pageSize?: number,
190
+ @Query('search') search?: string,
191
+ @Query('status') status?: string,
192
+ ) {
193
+ return this.trainingAdminService.getStudents(userId, { enterpriseId, page, pageSize, search, status });
194
+ }
195
+
196
+ @Get('admins/stats')
197
+ getAdminStats(
198
+ @User('id') userId: number,
199
+ @Query('enterpriseId', new ParseIntPipe({ optional: true })) enterpriseId?: number,
200
+ ) {
201
+ return this.trainingAdminService.getAdminStats(userId, enterpriseId);
202
+ }
203
+
204
+ @Get('admins')
205
+ getAdmins(
206
+ @User('id') userId: number,
207
+ @Query('enterpriseId', new ParseIntPipe({ optional: true })) enterpriseId?: number,
208
+ @Query('page', new ParseIntPipe({ optional: true })) page?: number,
209
+ @Query('pageSize', new ParseIntPipe({ optional: true })) pageSize?: number,
210
+ @Query('search') search?: string,
211
+ @Query('role') role?: string,
212
+ ) {
213
+ return this.trainingAdminService.getAdmins(userId, { enterpriseId, page, pageSize, search, role });
214
+ }
215
+
216
+ @Post('admins')
217
+ addAdmin(
218
+ @User('id') userId: number,
219
+ @Body() dto: { name: string; email?: string; department?: string; role?: string },
220
+ ) {
221
+ return this.trainingAdminService.addAdmin(userId, dto);
222
+ }
223
+
224
+ @Patch('admins/:id')
225
+ updateAdminRole(
226
+ @User('id') userId: number,
227
+ @Param('id', ParseIntPipe) enterpriseUserId: number,
228
+ @Body('role') role: string,
229
+ ) {
230
+ return this.trainingAdminService.updateAdminRole(userId, enterpriseUserId, role);
231
+ }
232
+
233
+ @Delete('admins/:id')
234
+ removeAdmin(
235
+ @User('id') userId: number,
236
+ @Param('id', ParseIntPipe) enterpriseUserId: number,
237
+ ) {
238
+ return this.trainingAdminService.removeAdmin(userId, enterpriseUserId);
239
+ }
240
+
241
+ @Get('relatorios')
242
+ getAdminReports(
243
+ @User('id') userId: number,
244
+ @Query('enterpriseId', new ParseIntPipe({ optional: true })) enterpriseId?: number,
245
+ @Query('dateFrom') dateFrom?: string,
246
+ @Query('dateTo') dateTo?: string,
247
+ ) {
248
+ return this.trainingAdminService.getAdminReports(userId, { enterpriseId, dateFrom, dateTo });
249
+ }
250
+
251
+ @Get('avaliacoes/stats')
252
+ getEvaluationStats(
253
+ @User('id') userId: number,
254
+ @Query('enterpriseId', new ParseIntPipe({ optional: true })) enterpriseId?: number,
255
+ ) {
256
+ return this.trainingAdminService.getEvaluationStats(userId, enterpriseId);
257
+ }
258
+
259
+ @Get('avaliacoes')
260
+ getEvaluationClassGroups(
261
+ @User('id') userId: number,
262
+ @Query('enterpriseId', new ParseIntPipe({ optional: true })) enterpriseId?: number,
263
+ @Query('page', new ParseIntPipe({ optional: true })) page?: number,
264
+ @Query('pageSize', new ParseIntPipe({ optional: true })) pageSize?: number,
265
+ @Query('search') search?: string,
266
+ ) {
267
+ return this.trainingAdminService.getEvaluationClassGroups(userId, { enterpriseId, page, pageSize, search });
268
+ }
269
+
270
+ @Get('avaliacoes/:classGroupId')
271
+ getEvaluationClassGroupDetail(
272
+ @User('id') userId: number,
273
+ @Param('classGroupId', ParseIntPipe) classGroupId: number,
274
+ @Query('enterpriseId', new ParseIntPipe({ optional: true })) enterpriseId?: number,
275
+ ) {
276
+ return this.trainingAdminService.getEvaluationClassGroupDetail(userId, classGroupId, enterpriseId);
277
+ }
278
+ }