Receba novidades do Hedhog no seu e-mail
Novos lançamentos, receitas e breaking changes — sem spam.
Submódulo LMS
platforma
O portal de LMS voltado ao aluno — catálogo de cursos e player, streaming de vídeo/HLS/legendas via tokens assinados, notificações de aula (com um stream SSE), sequência de aprendizado, avaliações de aula, self-service de carteira BitCode, heartbeats de tempo assistido, dashboards de desempenho e gerenciamento de perfil.
Caminho de origem: libraries/lms/src/platforma
Arquivo do módulo: (none — registered directly in lms.module.ts)
Introdução
A Platforma (a palavra portuguesa para "plataforma" — note que a classe do controller é literalmente `PlataformaController`, enquanto cada arquivo, serviço e o prefixo de rota `/lms/platforma` usam a grafia em inglês, uma inconsistência de nomenclatura pré-existente na base de código) é estruturalmente única entre os submódulos do LMS: ela não tem um `*.module.ts` dedicado. O `PlataformaController` e todos os seus cinco serviços de apoio (`PlatformaService`, `PlatformaVideoService`, `PlatformaHeartbeatService`, `PlatformaPerformanceService`, `PlatformaSearchService`) mais dois handlers de fila/evento são registrados diretamente no `LmsModule` raiz, em vez de cada submódulo ter seu próprio arquivo de módulo, como em todo o resto desta library.
O controller é decorado com `@NoRole()` em vez de `@Role()` — qualquer usuário autenticado pode chamá-lo, sem exigir uma role específica de plataforma — exceto por um grupo de rotas de streaming (`/video/:token`, `/hls/:token/...`, `/subtitles/:token/captions.vtt`) que são `@Public()`: o modelo de segurança para a entrega de vídeo é o próprio token assinado e com tempo limitado, e não uma verificação de sessão, já que um player de vídeo ou uma tag `<video>` não pode anexar um header Authorization a uma requisição de manifesto/segmento. Os tokens são cunhados pelos endpoints `@NoRole()` (`video-token`, `hls-token`, `subtitles-token`) e então entregues aos endpoints públicos de streaming.
Além do vídeo, a Platforma agrega vários outros submódulos por trás de uma superfície amigável ao aluno: notificações (listar/contagem de não lidas/marcar como lida/excluir, mais um endpoint SSE `GET /notifications/stream` para push ao vivo), a sequência de aprendizado e o registro de suas atividades, a submissão de avaliação de aula (delegando a `EvaluationService.getCourseLessonTopics`/`getMyLessonRatings`/`submitLessonRatings`, que não são de outra forma expostos pelo próprio controller do submódulo Evaluations), uma visão self-service da carteira BitCode e um endpoint de transação, uma busca entre entidades por cursos/trilhas/exames/turmas/instrutores, e um endpoint de heartbeat de tempo assistido que enfileira jobs assíncronos (ip/user-agent/posição/sessão) consumidos pelo `LessonHeartbeatHandler` para alimentar analytics de engajamento e o dashboard de desempenho. Dois endpoints (submissão de avaliação de aula e registro de atividade de sequência) aceitam formatos de body inline sem nenhum DTO com class-validator por trás.
Endpoints HTTP
32 endpoints
Dashboard do aluno (alias de home).
Dashboard de aprendizado do aluno.
Navega pelos cursos publicados.
- Query
- page, pageSize, search, category, sort
Obtém um curso publicado por slug.
- Params
- slug (string)
Busca entre entidades por cursos, trilhas de aprendizado, exames, turmas e instrutores.
- Query
- q, types? (csv), pageSize? (default 5)
Detalhe da aula.
- Params
- lessonId (int)
Emite um token assinado para reprodução progressiva de vídeo.
- Params
- lessonId (int)
- Query
- quality?
Emite um token assinado para streaming HLS.
- Params
- lessonId (int)
Faz streaming dos bytes do vídeo progressivo; o token assinado é a única autenticação.
- Params
- token (string)
Serve o manifesto master HLS.
- Params
- token (string)
Serve uma playlist de variante HLS.
- Params
- token (string), variant (string)
Serve um segmento de mídia HLS individual.
- Params
- token, variant, segment (string)
Emite um token assinado para legendas, se existirem segmentos de transcrição.
- Params
- lessonId (int)
Tópicos de nota de avaliação configurados para a aula.
- Params
- lessonId (int)
As notas existentes do chamador para a aula.
- Params
- lessonId (int)
Submete ou atualiza as notas de aula do chamador.
- Params
- lessonId (int)
Body
| Field | Type | Required | Notes |
|---|---|---|---|
| ratings | { topicId, score, comment? }[] | yes | Plain inline type, not a validated DTO |
Serve um arquivo de legendas VTT por token.
- Params
- token (string)
Lista as notificações do chamador.
- Query
- page, pageSize, search, sortField, sortOrder
Contagem de notificações não lidas.
Marca todas as notificações como lidas.
Marca uma notificação como lida.
- Params
- id (int)
Stream SSE para entrega de notificações em tempo real.
Exclui uma notificação.
- Params
- id (int)
Exclui todas as notificações do chamador.
Os dados de sequência de aprendizado do chamador.
- Query
- days?
Registra uma atividade que dispara a sequência.
Body
| Field | Type | Required | Notes |
|---|---|---|---|
| activityType | string | no | Plain inline type, not a validated DTO |
| source | string | no | — |
| activityDateKey | string | no | — |
A própria carteira BitCode do chamador.
Cria uma transação na própria carteira do chamador.
Body
| Field | Type | Required | Notes |
|---|---|---|---|
| type | 'credit' | 'debit' | no | — |
| amount | number | yes | Min 1 |
| description | string | no | Max 2000 chars |
| source | string | no | Max 200 chars |
KPIs agregados, gráfico de horas de estudo, desempenho por área, distribuição de acurácia e ranking.
- Query
- period? (default '30d')
Enfileira um job de heartbeat de tempo assistido de aula para rastreamento assíncrono de engajamento.
Body
| Field | Type | Required | Notes |
|---|---|---|---|
| lessonId | number | yes | — |
| positionSeconds | number | yes | Min 0 |
| sessionId | string | no | — |
| screenWidth | number | no | 1–10000 |
| screenHeight | number | no | 1–10000 |
| isTouch | boolean | no | — |
Dados combinados de perfil de usuário + person.
Atualiza o nome do chamador e/ou os campos de perfil de person em uma única transação.
Body
| Field | Type | Required | Notes |
|---|---|---|---|
| name | string | no | — |
| cpf | string | no | — |
| dob | string | no | — |
| gender | string | no | — |
| country | string | no | — |
| city | string | no | — |
| state | string | no | — |
| neighborhood | string | no | — |
| street | string | no | — |
| number | string | no | — |
| complement | string | no | — |
| zip | string | no | — |
| phone | string | no | — |
| profession | string | no | — |
Ferramentas MCP
Nenhuma ferramenta MCP mapeada para este submódulo.