Logotipo Hedhog

Receba novidades do Hedhog no seu e-mail

Novos lançamentos, receitas e breaking changes — sem spam.

Submódulo LMS

discussions

Engajamento em aulas voltado ao aluno: tópicos de discussão com âncoras de timestamp de vídeo e curtidas (compartilhados entre alunos matriculados), e notas pessoais com marcação de tempo (privadas para cada aluno).

Caminho de origem: libraries/lms/src/course-lesson-discussion, libraries/lms/src/course-lesson-note

Arquivo do módulo: course-lesson-discussion.module.ts, course-lesson-note.module.ts

Introdução

Esses dois controllers ficam lado a lado sob `/lms/course-lessons/:lessonId/` e parecem superficialmente semelhantes — ambos exigem que o chamador esteja matriculado no curso da aula (via uma verificação compartilhada `assertStudentAccess` que resolve o `person_id` a partir do usuário autenticado e verifica uma `course_enrollment` não cancelada), e ambos ancoram as entradas a uma posição `playerTimeSeconds` no vídeo da aula. A principal diferença de comportamento é a visibilidade: os tópicos de discussão são compartilhados entre todos os alunos matriculados na aula — o `GET /discussion/topics` retorna a árvore completa da thread sem filtragem por usuário, apenas computando uma flag `likedByMe` por tópico para o visualizador — enquanto as notas são estritamente privadas, com cada consulta filtrada por `person_id = chamador`. Um aluno não pode ver as notas de outro aluno sob nenhuma circunstância.

As respostas de discussão não são uma entidade separada; uma resposta é apenas outra linha de tópico com `parentTopicId` definido, e a árvore é reconstruída em memória a cada leitura. As curtidas usam uma linha com unicidade composta `(topic_id, person_id)` com `ON CONFLICT DO NOTHING` ao curtir e uma exclusão incondicional ao descurtir, de modo que curtir duas vezes ou descurtir quando não curtido são ambos no-ops silenciosos, e não erros. O conteúdo postado passa por um sanitizador manual baseado em regex que remove blocos `<script>`/`<style>`, atributos de evento inline `on*` e URIs `javascript:` — não é uma biblioteca completa de sanitização de HTML, portanto outras tags/atributos passam intactos.

Endpoints HTTP

9 endpoints

Árvore completa da thread de discussão da aula; exige que o chamador esteja matriculado no curso.

Params
lessonId (int)

Posta um tópico, ou uma resposta se parentTopicId estiver definido; o conteúdo é sanitizado de HTML.

Params
lessonId (int)

Body

FieldTypeRequiredNotes
contentstringyesMax 20000 chars
playerTimeSecondsnumberyesMin 0
parentTopicIdnumbernoSet to reply to an existing topic

Curte um tópico (idempotente — curtir duas vezes é um no-op).

Params
lessonId, topicId (int)

Remove a curtida do chamador (no-op se não previamente curtido).

Params
lessonId, topicId (int)

Lista as próprias notas do chamador para a aula, ordenadas pelo timestamp do player.

Params
lessonId (int)

Obtém uma das próprias notas do chamador por ID.

Params
lessonId, id (int)

Cria uma nota privada para o chamador na aula.

Params
lessonId (int)

Body

FieldTypeRequiredNotes
descriptionstringyesMax 5000 chars
playerTimeSecondsnumberyesMin 0
frameFileIdnumber | nullnoScreenshot frame attachment

Atualiza uma das próprias notas do chamador.

Params
lessonId, id (int)

Exclui uma das próprias notas do chamador; 204 No Content.

Params
lessonId, id (int)

Ferramentas MCP

Ferramentas nomeadas que podem ser chamadas por modelos de IA através do Model Context Protocol (MCP).

  • lms.lesson-discussion.topics.list

    Lista tópicos de discussão de uma aula de curso, retornados como uma árvore de thread. Requer matrícula

  • lms.lesson-discussion.topics.create

    Cria um novo tópico de discussão (ou resposta) em uma aula de curso

  • lms.lesson-discussion.topics.like

    Curte um tópico de discussão em uma aula de curso

  • lms.lesson-discussion.topics.unlike

    Remove a curtida de um tópico de discussão em uma aula de curso

  • lms.lesson-notes.list

    Lista as notas do usuário autenticado para uma aula de curso, ordenadas pelo timestamp do player

  • lms.lesson-notes.get

    Retorna uma única nota por ID para o usuário autenticado

  • lms.lesson-notes.create

    Cria uma nova nota em uma aula de curso para o usuário autenticado

  • lms.lesson-notes.update

    Atualiza uma das notas de aula do usuário autenticado

  • lms.lesson-notes.delete

    Exclui uma das notas de aula do usuário autenticado