@hed-hog/lms 0.0.270 → 0.0.274
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +487 -0
- package/package.json +5 -5
package/README.md
ADDED
|
@@ -0,0 +1,487 @@
|
|
|
1
|
+
# @hed-hog/lms
|
|
2
|
+
|
|
3
|
+
## 1. Visão geral do módulo
|
|
4
|
+
|
|
5
|
+
O módulo `@hed-hog/lms` é responsável pela gestão do sistema de Learning Management System (LMS) dentro do monorepo HedHog. Ele oferece funcionalidades para gerenciamento de cursos, aulas, avaliações, certificados, matrículas, instrutores, trilhas de aprendizagem e demais componentes relacionados ao ambiente educacional digital.
|
|
6
|
+
|
|
7
|
+
## 2. Escopo e responsabilidades
|
|
8
|
+
|
|
9
|
+
- Gerenciamento de cursos, módulos, aulas e suas respectivas estruturas.
|
|
10
|
+
- Controle de matrículas em cursos e trilhas de aprendizagem.
|
|
11
|
+
- Administração de avaliações, tentativas e respostas.
|
|
12
|
+
- Emissão e verificação de certificados.
|
|
13
|
+
- Gestão de instrutores e suas atribuições.
|
|
14
|
+
- Controle de presenças em aulas presenciais ou online.
|
|
15
|
+
- Organização de trilhas de aprendizagem e seus passos.
|
|
16
|
+
- Suporte a imagens e arquivos relacionados a cursos, exames e trilhas.
|
|
17
|
+
- Avaliações e feedbacks sobre tópicos específicos do LMS.
|
|
18
|
+
|
|
19
|
+
## 3. Endpoints
|
|
20
|
+
|
|
21
|
+
> **Nota:** O código fonte fornecido não expõe endpoints REST ou GraphQL diretamente. Este README documenta as tabelas e estruturas de dados do módulo LMS. Para uso via API, consulte a documentação específica da API que consome este módulo.
|
|
22
|
+
|
|
23
|
+
## 4. Regras de autenticação e autorização
|
|
24
|
+
|
|
25
|
+
- O módulo define um papel (`role`) chamado `admin-lms` com permissão total para gestão do LMS.
|
|
26
|
+
- A autenticação e autorização devem ser gerenciadas externamente, utilizando o papel `admin-lms` para operações administrativas.
|
|
27
|
+
- Outras regras específicas de acesso devem ser implementadas conforme a integração com o sistema de autenticação do HedHog.
|
|
28
|
+
|
|
29
|
+
## 5. Estruturas de request/response
|
|
30
|
+
|
|
31
|
+
- Não aplicável diretamente, pois o módulo não expõe endpoints REST no código fornecido.
|
|
32
|
+
- As operações devem ser realizadas via serviços internos ou APIs que consumam este módulo.
|
|
33
|
+
|
|
34
|
+
## 6. Erros comuns
|
|
35
|
+
|
|
36
|
+
- **Violação de integridade referencial:** ao tentar inserir ou atualizar registros com chaves estrangeiras inválidas.
|
|
37
|
+
- **Duplicidade de registros únicos:** como códigos únicos de certificado, slugs de cursos ou templates.
|
|
38
|
+
- **Status inválidos:** ao tentar definir valores fora dos enums definidos para status de cursos, exames, matrículas, etc.
|
|
39
|
+
- **Campos obrigatórios ausentes:** como títulos, slugs e chaves primárias.
|
|
40
|
+
|
|
41
|
+
## 7. Banco de dados (tabelas YAML)
|
|
42
|
+
|
|
43
|
+
### certificate
|
|
44
|
+
|
|
45
|
+
- **Finalidade:** Armazena certificados emitidos para estudantes em cursos, exames, grupos de aulas ou trilhas de aprendizagem.
|
|
46
|
+
- **Colunas principais:**
|
|
47
|
+
- `verification_code` (varchar 50, único): código para verificação do certificado.
|
|
48
|
+
- `student_id` (fk para person): estudante que recebeu o certificado.
|
|
49
|
+
- `course_enrollment_id` (fk opcional): matrícula relacionada.
|
|
50
|
+
- `certificate_type` (enum): tipo do certificado (`course`, `exam`, `course_class_group`, `learning_path`).
|
|
51
|
+
- `student_name`, `course_name` (varchar 255): nomes para exibição.
|
|
52
|
+
- `workload_hours` (int): carga horária.
|
|
53
|
+
- `issued_at`, `completed_at` (datetime): datas relevantes.
|
|
54
|
+
- `final_score` (int opcional): nota final.
|
|
55
|
+
- `verification_url`, `pdf_url` (varchar 500 opcionais): URLs para verificação e PDF.
|
|
56
|
+
- **Integridade:** chaves estrangeiras com ações `CASCADE` ou `SET NULL`.
|
|
57
|
+
- **Índices:** único em `verification_code`.
|
|
58
|
+
|
|
59
|
+
### certificate_template
|
|
60
|
+
|
|
61
|
+
- **Finalidade:** Modelos de certificados para emissão.
|
|
62
|
+
- **Colunas principais:**
|
|
63
|
+
- `name`, `slug` (varchar 255, slug único).
|
|
64
|
+
- `description` (texto opcional).
|
|
65
|
+
- `template_content` (texto): conteúdo do template.
|
|
66
|
+
- `status` (enum): `draft`, `active`, `inactive` (default `draft`).
|
|
67
|
+
- **Índices:** único em `slug`.
|
|
68
|
+
|
|
69
|
+
### course
|
|
70
|
+
|
|
71
|
+
- **Finalidade:** Cursos disponíveis no LMS.
|
|
72
|
+
- **Colunas principais:**
|
|
73
|
+
- `title`, `slug` (varchar 255, slug único).
|
|
74
|
+
- `description`, `short_description` (texto e varchar 500 opcionais).
|
|
75
|
+
- `level` (enum): `beginner`, `intermediate`, `advanced` (default `beginner`).
|
|
76
|
+
- `duration_hours` (int, default 0).
|
|
77
|
+
- `status` (enum): `draft`, `published`, `archived` (default `draft`).
|
|
78
|
+
- Cores primárias e secundárias para personalização visual.
|
|
79
|
+
- `certificate_workload` (int opcional).
|
|
80
|
+
- `certificate_template_id` (fk opcional).
|
|
81
|
+
- `requirements`, `objectives`, `target_audience` (texto opcionais).
|
|
82
|
+
- **Índices:** único em `slug`.
|
|
83
|
+
|
|
84
|
+
### course_category
|
|
85
|
+
|
|
86
|
+
- **Finalidade:** Associação entre cursos e categorias.
|
|
87
|
+
- **Colunas principais:**
|
|
88
|
+
- `course_id` (fk).
|
|
89
|
+
- `category_id` (fk).
|
|
90
|
+
- **Índices:** único em combinação `course_id` + `category_id`.
|
|
91
|
+
|
|
92
|
+
### course_class_attendance
|
|
93
|
+
|
|
94
|
+
- **Finalidade:** Registro de presença dos estudantes em sessões de aula.
|
|
95
|
+
- **Colunas principais:**
|
|
96
|
+
- `course_class_session_id` (fk).
|
|
97
|
+
- `student_id` (fk).
|
|
98
|
+
- `present` (boolean, default false).
|
|
99
|
+
- `justification` (texto opcional).
|
|
100
|
+
- `recorded_by_id` (fk opcional).
|
|
101
|
+
- **Índices:** único em combinação `course_class_session_id` + `student_id`.
|
|
102
|
+
|
|
103
|
+
### course_class_group
|
|
104
|
+
|
|
105
|
+
- **Finalidade:** Grupos de aulas de um curso.
|
|
106
|
+
- **Colunas principais:**
|
|
107
|
+
- `course_id` (fk).
|
|
108
|
+
- `title`, `code` (varchar, código único).
|
|
109
|
+
- `description` (texto opcional).
|
|
110
|
+
- `delivery_mode` (enum): `presential`, `online`, `hybrid`.
|
|
111
|
+
- `status` (enum): `open`, `ongoing`, `completed`, `cancelled` (default `open`).
|
|
112
|
+
- Datas e horários de início e fim.
|
|
113
|
+
- `capacity` (int, default 30).
|
|
114
|
+
- `location`, `virtual_room_url` (texto e varchar 500 opcionais).
|
|
115
|
+
- **Índices:** único em `code`.
|
|
116
|
+
|
|
117
|
+
### course_class_session
|
|
118
|
+
|
|
119
|
+
- **Finalidade:** Sessões específicas dentro de um grupo de aula.
|
|
120
|
+
- **Colunas principais:**
|
|
121
|
+
- `course_class_group_id` (fk).
|
|
122
|
+
- `title`, `description` (varchar e texto opcional).
|
|
123
|
+
- `session_date` (datetime).
|
|
124
|
+
- Horários de início e fim.
|
|
125
|
+
- `location`, `meeting_url` (texto e varchar 500 opcionais).
|
|
126
|
+
- `status` (enum): `scheduled`, `completed`, `cancelled` (default `scheduled`).
|
|
127
|
+
- **Índices:** combinação `course_class_group_id` + `session_date`.
|
|
128
|
+
|
|
129
|
+
### course_class_session_instructor
|
|
130
|
+
|
|
131
|
+
- **Finalidade:** Instrutores vinculados a sessões de aula.
|
|
132
|
+
- **Colunas principais:**
|
|
133
|
+
- `course_class_session_id` (fk).
|
|
134
|
+
- `instructor_id` (fk).
|
|
135
|
+
- `role` (enum): `lead`, `assistant` (default `assistant`).
|
|
136
|
+
- **Índices:** único em combinação `course_class_session_id` + `instructor_id`.
|
|
137
|
+
|
|
138
|
+
### course_enrollment
|
|
139
|
+
|
|
140
|
+
- **Finalidade:** Matrículas de pessoas em cursos ou grupos de aula.
|
|
141
|
+
- **Colunas principais:**
|
|
142
|
+
- `person_id` (fk).
|
|
143
|
+
- `course_class_group_id` (fk opcional).
|
|
144
|
+
- `course_id` (fk).
|
|
145
|
+
- `status` (enum): `pending`, `active`, `completed`, `cancelled`, `paused` (default `active`).
|
|
146
|
+
- Datas de matrícula e conclusão.
|
|
147
|
+
- `progress_percent` (int, default 0).
|
|
148
|
+
- `final_score` (int opcional).
|
|
149
|
+
- **Índices:** único em combinação `person_id` + `course_class_group_id`.
|
|
150
|
+
|
|
151
|
+
### course_image
|
|
152
|
+
|
|
153
|
+
- **Finalidade:** Imagens associadas a cursos.
|
|
154
|
+
- **Colunas principais:**
|
|
155
|
+
- `course_id` (fk).
|
|
156
|
+
- `file_id` (fk).
|
|
157
|
+
- `image_type_id` (fk).
|
|
158
|
+
- `order` (int).
|
|
159
|
+
- `is_primary` (boolean, default false).
|
|
160
|
+
- **Índices:** único em combinação `course_id` + `image_type_id` + `order`.
|
|
161
|
+
|
|
162
|
+
### course_lesson
|
|
163
|
+
|
|
164
|
+
- **Finalidade:** Aulas dentro de módulos de curso.
|
|
165
|
+
- **Colunas principais:**
|
|
166
|
+
- `course_module_id` (fk).
|
|
167
|
+
- `title`, `description` (varchar e texto opcional).
|
|
168
|
+
- `type` (enum): `video`, `text`, `quiz` (default `video`).
|
|
169
|
+
- `content` (texto opcional).
|
|
170
|
+
- `duration_seconds` (int, default 0).
|
|
171
|
+
- `order` (int).
|
|
172
|
+
- `is_released` (boolean, default true).
|
|
173
|
+
- **Índices:** único em combinação `course_module_id` + `order`.
|
|
174
|
+
|
|
175
|
+
### course_lesson_file
|
|
176
|
+
|
|
177
|
+
- **Finalidade:** Arquivos vinculados a aulas.
|
|
178
|
+
- **Colunas principais:**
|
|
179
|
+
- `course_lesson_id` (fk).
|
|
180
|
+
- `file_id` (fk opcional).
|
|
181
|
+
- `title` (varchar).
|
|
182
|
+
- **Índices:** em `course_lesson_id`.
|
|
183
|
+
|
|
184
|
+
### course_lesson_instructor
|
|
185
|
+
|
|
186
|
+
- **Finalidade:** Instrutores vinculados a aulas.
|
|
187
|
+
- **Colunas principais:**
|
|
188
|
+
- `course_lesson_id` (fk).
|
|
189
|
+
- `instructor_id` (fk).
|
|
190
|
+
- `role` (enum): `lead`, `assistant` (default `assistant`).
|
|
191
|
+
- **Índices:** único em combinação `course_lesson_id` + `instructor_id`.
|
|
192
|
+
|
|
193
|
+
### course_lesson_progress
|
|
194
|
+
|
|
195
|
+
- **Finalidade:** Progresso dos estudantes em aulas.
|
|
196
|
+
- **Colunas principais:**
|
|
197
|
+
- `course_enrollment_id` (fk).
|
|
198
|
+
- `course_lesson_id` (fk).
|
|
199
|
+
- `status` (enum): `not_started`, `in_progress`, `completed` (default `not_started`).
|
|
200
|
+
- `progress_percent` (int, default 0).
|
|
201
|
+
- `video_progress_seconds` (int, default 0).
|
|
202
|
+
- Datas de início e conclusão.
|
|
203
|
+
- `time_spent_seconds` (int, default 0).
|
|
204
|
+
- **Índices:** único em combinação `course_enrollment_id` + `course_lesson_id`.
|
|
205
|
+
|
|
206
|
+
### course_lesson_question
|
|
207
|
+
|
|
208
|
+
- **Finalidade:** Questões associadas a aulas do tipo quiz.
|
|
209
|
+
- **Colunas principais:**
|
|
210
|
+
- `course_lesson_id` (fk).
|
|
211
|
+
- `question_id` (fk).
|
|
212
|
+
- `order` (int).
|
|
213
|
+
- **Índices:** únicos em combinações `course_lesson_id` + `question_id` e `course_lesson_id` + `order`.
|
|
214
|
+
|
|
215
|
+
### course_module
|
|
216
|
+
|
|
217
|
+
- **Finalidade:** Módulos dentro de cursos.
|
|
218
|
+
- **Colunas principais:**
|
|
219
|
+
- `course_id` (fk).
|
|
220
|
+
- `title`, `description` (varchar e texto opcional).
|
|
221
|
+
- `order` (int).
|
|
222
|
+
- `duration_minutes` (int, default 0).
|
|
223
|
+
- **Índices:** único em combinação `course_id` + `order`.
|
|
224
|
+
|
|
225
|
+
### course_prerequisite
|
|
226
|
+
|
|
227
|
+
- **Finalidade:** Pré-requisitos para cursos.
|
|
228
|
+
- **Colunas principais:**
|
|
229
|
+
- `course_id` (fk).
|
|
230
|
+
- `prerequisite_type` (enum): `course`, `learning_path`, `exam` (default `course`).
|
|
231
|
+
- FK para curso, trilha ou exame conforme tipo.
|
|
232
|
+
- **Índices:** únicos para combinações de curso e pré-requisitos.
|
|
233
|
+
|
|
234
|
+
### evaluation_rating
|
|
235
|
+
|
|
236
|
+
- **Finalidade:** Avaliações e notas dadas a tópicos de avaliação.
|
|
237
|
+
- **Colunas principais:**
|
|
238
|
+
- `evaluation_topic_id` (fk).
|
|
239
|
+
- `evaluator_id` (fk opcional).
|
|
240
|
+
- `score` (decimal 2,1).
|
|
241
|
+
- `comment` (texto opcional).
|
|
242
|
+
- **Índices:** único em combinação `evaluation_topic_id` + `evaluator_id`.
|
|
243
|
+
|
|
244
|
+
### evaluation_topic
|
|
245
|
+
|
|
246
|
+
- **Finalidade:** Tópicos para avaliação dentro do LMS.
|
|
247
|
+
- **Colunas principais:**
|
|
248
|
+
- `name`, `description` (varchar e texto opcional).
|
|
249
|
+
- `target_type` (enum): `course`, `course_lesson`, `course_class_session`, `question`, `exam`.
|
|
250
|
+
- FK opcionais para entidades alvo.
|
|
251
|
+
- `order` (int).
|
|
252
|
+
- `is_active` (boolean, default true).
|
|
253
|
+
- **Índices:** únicos para combinações de alvo e ordem.
|
|
254
|
+
|
|
255
|
+
### exam
|
|
256
|
+
|
|
257
|
+
- **Finalidade:** Exames vinculados a cursos ou grupos de aula.
|
|
258
|
+
- **Colunas principais:**
|
|
259
|
+
- FK para curso e grupo de aula (opcionais).
|
|
260
|
+
- `title`, `description`, `instructions` (varchar e textos opcionais).
|
|
261
|
+
- `exam_type` (enum): `quiz`, `test`, `assignment`, `project`.
|
|
262
|
+
- `status` (enum): `draft`, `published`, `closed`, `archived` (default `draft`).
|
|
263
|
+
- Cores para personalização.
|
|
264
|
+
- Datas de início e fim, limite de tempo.
|
|
265
|
+
- `attempts_allowed` (int, default 1).
|
|
266
|
+
- Notas mínima e máxima.
|
|
267
|
+
- Flags para embaralhamento e exibição de resultados.
|
|
268
|
+
- **Índices:** em curso, grupo e status.
|
|
269
|
+
|
|
270
|
+
### exam_answer
|
|
271
|
+
|
|
272
|
+
- **Finalidade:** Respostas dadas em tentativas de exame.
|
|
273
|
+
- **Colunas principais:**
|
|
274
|
+
- `exam_attempt_id` (fk).
|
|
275
|
+
- `question_id` (fk).
|
|
276
|
+
- `exam_option_id` (fk opcional).
|
|
277
|
+
- `answer_text` (texto opcional).
|
|
278
|
+
- `is_correct` (boolean opcional).
|
|
279
|
+
- `points_awarded` (int, default 0).
|
|
280
|
+
- `teacher_feedback` (texto opcional).
|
|
281
|
+
- **Índices:** único em combinação `exam_attempt_id` + `question_id`.
|
|
282
|
+
|
|
283
|
+
### exam_attempt
|
|
284
|
+
|
|
285
|
+
- **Finalidade:** Tentativas de realização de exames por estudantes.
|
|
286
|
+
- **Colunas principais:**
|
|
287
|
+
- `exam_id` (fk).
|
|
288
|
+
- `student_id` (fk).
|
|
289
|
+
- `course_enrollment_id` (fk opcional).
|
|
290
|
+
- `attempt_number` (int, default 1).
|
|
291
|
+
- Datas de início e fim.
|
|
292
|
+
- `duration_seconds` (int opcional).
|
|
293
|
+
- `score` (int opcional).
|
|
294
|
+
- `status` (enum): `in_progress`, `completed`, `abandoned`, `voided` (default `in_progress`).
|
|
295
|
+
- `ip_address` (varchar 45 opcional).
|
|
296
|
+
- **Índices:** único em combinação `exam_id` + `student_id` + `attempt_number`.
|
|
297
|
+
|
|
298
|
+
### exam_image
|
|
299
|
+
|
|
300
|
+
- **Finalidade:** Imagens associadas a exames.
|
|
301
|
+
- **Colunas principais:**
|
|
302
|
+
- `exam_id` (fk).
|
|
303
|
+
- `file_id` (fk).
|
|
304
|
+
- `image_type_id` (fk).
|
|
305
|
+
- `order` (int).
|
|
306
|
+
- `is_primary` (boolean, default false).
|
|
307
|
+
- **Índices:** único em combinação `exam_id` + `image_type_id` + `order`.
|
|
308
|
+
|
|
309
|
+
### exam_option
|
|
310
|
+
|
|
311
|
+
- **Finalidade:** Opções de resposta para questões de exame.
|
|
312
|
+
- **Colunas principais:**
|
|
313
|
+
- `question_id` (fk).
|
|
314
|
+
- `option_text` (texto).
|
|
315
|
+
- `is_correct` (boolean, default false).
|
|
316
|
+
- `position` (int, default 0).
|
|
317
|
+
- `feedback` (texto opcional).
|
|
318
|
+
- **Índices:** único em combinação `question_id` + `position`.
|
|
319
|
+
|
|
320
|
+
### exam_question
|
|
321
|
+
|
|
322
|
+
- **Finalidade:** Questões associadas a exames.
|
|
323
|
+
- **Colunas principais:**
|
|
324
|
+
- `exam_id` (fk).
|
|
325
|
+
- `question_id` (fk).
|
|
326
|
+
- `order` (int).
|
|
327
|
+
- **Índices:** únicos em combinações `exam_id` + `question_id` e `exam_id` + `order`.
|
|
328
|
+
|
|
329
|
+
### image_type
|
|
330
|
+
|
|
331
|
+
- **Finalidade:** Tipos de imagens aplicáveis a cursos, exames e trilhas.
|
|
332
|
+
- **Colunas principais:**
|
|
333
|
+
- `name`, `slug` (varchar 100, slug único).
|
|
334
|
+
- Flags para aplicação em curso, exame e trilha.
|
|
335
|
+
- `status` (enum): `active`, `inactive` (default `active`).
|
|
336
|
+
- **Índices:** único em `slug`.
|
|
337
|
+
|
|
338
|
+
### instructor
|
|
339
|
+
|
|
340
|
+
- **Finalidade:** Instrutores cadastrados no LMS.
|
|
341
|
+
- **Colunas principais:**
|
|
342
|
+
- `person_id` (fk único).
|
|
343
|
+
- `status` (enum): `active`, `inactive` (default `active`).
|
|
344
|
+
- `can_teach_courses` (boolean, default true).
|
|
345
|
+
- **Índices:** único em `person_id`.
|
|
346
|
+
|
|
347
|
+
### learning_path
|
|
348
|
+
|
|
349
|
+
- **Finalidade:** Trilhas de aprendizagem compostas por cursos e exames.
|
|
350
|
+
- **Colunas principais:**
|
|
351
|
+
- `title`, `slug` (varchar 255, slug único).
|
|
352
|
+
- `description`, `short_description` (texto e varchar 500 opcionais).
|
|
353
|
+
- `level` (enum): `beginner`, `intermediate`, `advanced` (default `beginner`).
|
|
354
|
+
- `duration_hours` (int, default 0).
|
|
355
|
+
- `status` (enum): `draft`, `active`, `archived` (default `draft`).
|
|
356
|
+
- Cores para personalização.
|
|
357
|
+
- **Índices:** único em `slug`.
|
|
358
|
+
|
|
359
|
+
### learning_path_enrollment
|
|
360
|
+
|
|
361
|
+
- **Finalidade:** Matrículas em trilhas de aprendizagem.
|
|
362
|
+
- **Colunas principais:**
|
|
363
|
+
- `learning_path_id` (fk).
|
|
364
|
+
- `person_id` (fk).
|
|
365
|
+
- `status` (enum): `active`, `completed`, `cancelled` (default `active`).
|
|
366
|
+
- `progress_percent` (int, default 0).
|
|
367
|
+
- Datas de matrícula e conclusão.
|
|
368
|
+
- **Índices:** único em combinação `learning_path_id` + `person_id`.
|
|
369
|
+
|
|
370
|
+
### learning_path_image
|
|
371
|
+
|
|
372
|
+
- **Finalidade:** Imagens associadas a trilhas de aprendizagem.
|
|
373
|
+
- **Colunas principais:**
|
|
374
|
+
- `learning_path_id` (fk).
|
|
375
|
+
- `file_id` (fk).
|
|
376
|
+
- `image_type_id` (fk).
|
|
377
|
+
- `order` (int).
|
|
378
|
+
- `is_primary` (boolean, default false).
|
|
379
|
+
- **Índices:** único em combinação `learning_path_id` + `image_type_id` + `order`.
|
|
380
|
+
|
|
381
|
+
### learning_path_step
|
|
382
|
+
|
|
383
|
+
- **Finalidade:** Passos dentro de uma trilha, podendo ser cursos ou exames.
|
|
384
|
+
- **Colunas principais:**
|
|
385
|
+
- `learning_path_id` (fk).
|
|
386
|
+
- `step_type` (enum): `course`, `exam`.
|
|
387
|
+
- FK para curso ou exame conforme tipo.
|
|
388
|
+
- `order` (int).
|
|
389
|
+
- `is_required` (boolean, default true).
|
|
390
|
+
- **Índices:** únicos para combinações de trilha e ordem, curso ou exame.
|
|
391
|
+
|
|
392
|
+
### question
|
|
393
|
+
|
|
394
|
+
- **Finalidade:** Questões para avaliações e quizzes.
|
|
395
|
+
- **Colunas principais:**
|
|
396
|
+
- `question_type` (enum): `multiple_choice`, `true_false`, `essay`, `fill_blank`, `matching`.
|
|
397
|
+
- `statement` (texto).
|
|
398
|
+
- `explanation` (texto opcional).
|
|
399
|
+
- `points` (int, default 1).
|
|
400
|
+
|
|
401
|
+
## 8. Regras de negócio relevantes
|
|
402
|
+
|
|
403
|
+
- Certificados são vinculados a estudantes e podem estar associados a diferentes tipos de atividades (curso, exame, grupo de aula, trilha).
|
|
404
|
+
- Cursos, exames e trilhas possuem status que controlam sua visibilidade e disponibilidade.
|
|
405
|
+
- Matrículas e inscrições possuem status que refletem o progresso e situação do aluno.
|
|
406
|
+
- Avaliações e tentativas de exame são controladas para permitir múltiplas tentativas e registrar resultados detalhados.
|
|
407
|
+
- Instrutores podem ter papéis distintos (líder ou assistente) em aulas e sessões.
|
|
408
|
+
- Trilhas de aprendizagem são compostas por passos ordenados que podem ser cursos ou exames, podendo ser obrigatórios ou opcionais.
|
|
409
|
+
- Progresso em aulas e cursos é monitorado para permitir acompanhamento detalhado do aluno.
|
|
410
|
+
- Imagens e arquivos são organizados por tipo e podem ser marcados como primários para exibição.
|
|
411
|
+
|
|
412
|
+
## 9. Guia rápido de uso (exemplos)
|
|
413
|
+
|
|
414
|
+
> Como o módulo não expõe endpoints diretamente, o uso típico envolve integração via serviços internos ou APIs do HedHog.
|
|
415
|
+
|
|
416
|
+
### Exemplo: Criar um novo curso
|
|
417
|
+
|
|
418
|
+
```ts
|
|
419
|
+
const novoCurso = await prisma.course.create({
|
|
420
|
+
data: {
|
|
421
|
+
title: 'Introdução ao HedHog LMS',
|
|
422
|
+
slug: 'introducao-hedhog-lms',
|
|
423
|
+
description: 'Curso básico para entender o LMS HedHog',
|
|
424
|
+
level: 'beginner',
|
|
425
|
+
duration_hours: 10,
|
|
426
|
+
status: 'draft',
|
|
427
|
+
},
|
|
428
|
+
});
|
|
429
|
+
```
|
|
430
|
+
|
|
431
|
+
### Exemplo: Matricular um estudante em um curso
|
|
432
|
+
|
|
433
|
+
```ts
|
|
434
|
+
const matricula = await prisma.course_enrollment.create({
|
|
435
|
+
data: {
|
|
436
|
+
person_id: estudanteId,
|
|
437
|
+
course_id: cursoId,
|
|
438
|
+
status: 'active',
|
|
439
|
+
enrolled_at: new Date(),
|
|
440
|
+
},
|
|
441
|
+
});
|
|
442
|
+
```
|
|
443
|
+
|
|
444
|
+
### Exemplo: Registrar presença em uma sessão de aula
|
|
445
|
+
|
|
446
|
+
```ts
|
|
447
|
+
const presenca = await prisma.course_class_attendance.upsert({
|
|
448
|
+
where: {
|
|
449
|
+
course_class_session_id_student_id: {
|
|
450
|
+
course_class_session_id: sessaoId,
|
|
451
|
+
student_id: estudanteId,
|
|
452
|
+
},
|
|
453
|
+
},
|
|
454
|
+
update: { present: true },
|
|
455
|
+
create: {
|
|
456
|
+
course_class_session_id: sessaoId,
|
|
457
|
+
student_id: estudanteId,
|
|
458
|
+
present: true,
|
|
459
|
+
},
|
|
460
|
+
});
|
|
461
|
+
```
|
|
462
|
+
|
|
463
|
+
### Exemplo: Emitir um certificado
|
|
464
|
+
|
|
465
|
+
```ts
|
|
466
|
+
const certificado = await prisma.certificate.create({
|
|
467
|
+
data: {
|
|
468
|
+
verification_code: gerarCodigoUnico(),
|
|
469
|
+
student_id: estudanteId,
|
|
470
|
+
course_id: cursoId,
|
|
471
|
+
certificate_template_id: templateId,
|
|
472
|
+
certificate_type: 'course',
|
|
473
|
+
student_name: nomeEstudante,
|
|
474
|
+
course_name: nomeCurso,
|
|
475
|
+
workload_hours: cargaHoraria,
|
|
476
|
+
issued_at: new Date(),
|
|
477
|
+
completed_at: dataConclusao,
|
|
478
|
+
final_score: notaFinal,
|
|
479
|
+
verification_url: urlVerificacao,
|
|
480
|
+
pdf_url: urlPdf,
|
|
481
|
+
},
|
|
482
|
+
});
|
|
483
|
+
```
|
|
484
|
+
|
|
485
|
+
---
|
|
486
|
+
|
|
487
|
+
Para mais detalhes sobre integração e uso, consulte a documentação geral do HedHog e os serviços que consomem o módulo `@hed-hog/lms`.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hed-hog/lms",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.274",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"dependencies": {
|
|
@@ -10,13 +10,13 @@
|
|
|
10
10
|
"@nestjs/jwt": "^11",
|
|
11
11
|
"@nestjs/mapped-types": "*",
|
|
12
12
|
"@hed-hog/api-pagination": "0.0.6",
|
|
13
|
-
"@hed-hog/core": "0.0.
|
|
13
|
+
"@hed-hog/core": "0.0.274",
|
|
14
14
|
"@hed-hog/api": "0.0.4",
|
|
15
15
|
"@hed-hog/api-locale": "0.0.13",
|
|
16
|
+
"@hed-hog/finance": "0.0.274",
|
|
16
17
|
"@hed-hog/api-types": "0.0.1",
|
|
17
|
-
"@hed-hog/
|
|
18
|
-
"@hed-hog/
|
|
19
|
-
"@hed-hog/category": "0.0.270",
|
|
18
|
+
"@hed-hog/contact": "0.0.274",
|
|
19
|
+
"@hed-hog/category": "0.0.274",
|
|
20
20
|
"@hed-hog/api-prisma": "0.0.5"
|
|
21
21
|
},
|
|
22
22
|
"exports": {
|