Feature: Conteúdo Público Por Slug
Introdução ao documento
Este documento cobre a feature de entrada pública por slug, usada para montar uma experiência de login contextual por curso, marca e tipo de usuário inferido pelo host. Evidências: src/app/(public-routes)/[slug]/page.tsx:7-52.
Versionamento
- Documento criado em
2026-03-20. - Revisar quando mudarem
src/app/(public-routes)/[slug]/page.tsxougetHomeData. Evidências:src/app/(public-routes)/[slug]/page.tsx:7-52.
Referencial teórico
O comportamento foi derivado da página dinâmica pública e do reaproveitamento do componente Login. Evidências: src/app/(public-routes)/[slug]/page.tsx:7-52, src/components/Login/Login.component.tsx:77-237.
Visão geral
- A página busca
pageDatacomgetHomeData(params.slug). Evidências:src/app/(public-routes)/[slug]/page.tsx:33. - O host define
userTypecontextual (participante,supervisoroufacilitador). Evidências:src/app/(public-routes)/[slug]/page.tsx:11-30. - Se a página do curso estiver em manutenção, a UI rende
MaintenancePage; se não houver conteúdo, redireciona para/. Evidências:src/app/(public-routes)/[slug]/page.tsx:35-52.
Atores
- Visitante público. Evidências:
src/app/(public-routes)/[slug]/page.tsx:7-52. - Participante, supervisor ou facilitador inferidos pelo domínio. Evidências:
src/app/(public-routes)/[slug]/page.tsx:11-30. - Serviço de conteúdo do backend, consumido por
getHomeData. Evidências:src/app/(public-routes)/[slug]/page.tsx:2,src/app/(public-routes)/[slug]/page.tsx:33.
Pré-condições
- A rota pública deve receber um
slugválido. Evidências:src/app/(public-routes)/[slug]/page.tsx:7,src/app/(public-routes)/[slug]/page.tsx:33. - O backend precisa retornar
pageData; se retornar vazio, a página não prossegue. Evidências:src/app/(public-routes)/[slug]/page.tsx:35-52.
Fluxo principal
- A página lê o cabeçalho
host. Evidências:src/app/(public-routes)/[slug]/page.tsx:8-10. - O código infere o tipo de usuário a partir do domínio. Evidências:
src/app/(public-routes)/[slug]/page.tsx:11-30. - A página busca os dados de home/login com
getHomeData(slug). Evidências:src/app/(public-routes)/[slug]/page.tsx:33. - Em sucesso, renderiza
LogincompageData,userTypeehost. Evidências:src/app/(public-routes)/[slug]/page.tsx:46-48.
Fluxos alternativos
- Se
maintenance_mode_course_hub_activeestiver ligado, a página pública entra em manutenção. Evidências:src/app/(public-routes)/[slug]/page.tsx:35-45. - Se
pageDatanão vier, o usuário é redirecionado para a raiz/. Evidências:src/app/(public-routes)/[slug]/page.tsx:49-52. - Se o host não corresponder a nenhuma convenção,
userTypeficanull. Evidências:src/app/(public-routes)/[slug]/page.tsx:11-30.
Regras de negócio
- Hosts com
hubsão tratados comoparticipante. Evidências:src/app/(public-routes)/[slug]/page.tsx:14-16. - Hosts com
supervisorsão tratados comosupervisor. Evidências:src/app/(public-routes)/[slug]/page.tsx:18-20. - Hosts com
facilitadoroudhedalossão tratados comofacilitador. Evidências:src/app/(public-routes)/[slug]/page.tsx:22-28. - O conteúdo de manutenção usa campos específicos do
pageData(title,message,description,banner). Evidências:src/app/(public-routes)/[slug]/page.tsx:36-43.
Estados possíveis
carregado: login contextual renderizado. Evidências:src/app/(public-routes)/[slug]/page.tsx:46-48.manutencao:MaintenancePagerenderizada. Evidências:src/app/(public-routes)/[slug]/page.tsx:35-45.nao_encontrado: redirect para/. Evidências:src/app/(public-routes)/[slug]/page.tsx:49-52.
Endpoints envolvidos
- Ver OpenAPI: a feature usa o backend externo acessado por
getHomeData, mas esse contrato não é exposto por rota App Router local. - O login subsequente reutiliza os endpoints da feature autenticacao-e-acesso.md e o OpenAPI.
Dados impactados
- Ver model.md: dados de curso, branding,
course_ide contexto de turma usados depois no login. - O documento local não formaliza o schema de
pageData; ele é observado pelo uso debanner,logo,course_id,titleeexcerpt. Evidências:src/components/Login/Login.component.tsx:25-32,src/components/Login/Login.component.tsx:98.
Pendências
- O contrato completo de
getHomeData(slug)não está tipado no repositório. - Não há lista oficial de hosts suportados além das convenções inferidas no código.