Pular para o conteúdo principal

Dhedalos Hub Frontend

Visão geral do repositório

Este repositório contém uma aplicação Next.js focada em frontend web, com autenticação via NextAuth e uma camada BFF local em src/app/api para integrar turmas, agenda, submissões, quiz, chat e telemetria. Os módulos protegidos identificados no App Router incluem home, agenda, agendar, atendimento, consultoria, gestao-de-atividades, participacao, quiz, sala-de-reuniao e trocar-turma.

Evidências:

  • package.json:1-22
  • src/app/page.tsx:8-27
  • src/app/(protected-routes)/layout.tsx:21-74
  • src/app/(protected-routes)/home/page.tsx:18-67
  • src/app/(protected-routes)/quiz/page.tsx:21-231

Como rodar

Desenvolvimento

npm install
npm run dev

Testes

npm test
npm run lint
npm run prettier
npm run cypress:run

Build

npm run build
npm run start

Storybook

npm run storybook
npm run build-storybook

Evidências:

  • package.json:5-22
  • src/stories/DocumentacaoProjeto.mdx:11-59

Variáveis de ambiente

Variáveis base presentes em .env.example

VariávelUso observadoEvidência
PROJECT_NAMEConfigura identidade do projeto exposta via /api/project-name/config e usada em variações de UI..env.example:1, src/app/api/project-name/config/route.ts:3-12, src/components/MeetRoom/MeetRoom.component.tsx:82-89
NEXTAUTH_URLURL base da autenticação..env.example:3, helm/templates/secret.yaml:13-18
NEXTAUTH_SECRETSegredo do NextAuth..env.example:4, helm/templates/secret.yaml:18
API_URLBase do backend WordPress/Dhedalos consumido pelo BFF local..env.example:5, src/utils/consts.ts:1, helm/templates/secret.yaml:20-21
DHEDALOS_PRIVACY_POLICYPolítica de privacidade no layout..env.example:6, src/app/layout.tsx:48-49
SCHEDULE_URLBase do Schedule Manager..env.example:8, src/utils/consts.ts:2-5, helm/templates/secret.yaml:19
SCHEDULE_APP_KEYCredencial para integrações de agenda..env.example:9, src/utils/consts.ts:5
JITSI_SERVER_URLHost retornado em /api/jitsi/config..env.example:11-14, src/app/api/jitsi/config/route.ts:3-18
DATADOG_ENVAmbiente Datadog no exemplo local..env.example:16, src/app/start/DatadogStart.tsx:19-41
DATADOG_SERVICENome do serviço Datadog no exemplo local..env.example:17, src/app/start/DatadogStart.tsx:19-41
DATADOG_CLIENT_IDapplicationId do Datadog RUM no exemplo local..env.example:18, src/app/start/DatadogStart.tsx:19-32
DATADOG_CLIENT_TOKENToken de logs/RUM no exemplo local..env.example:19, src/app/start/DatadogStart.tsx:19-41
METADATA_SITE_NAMETítulo da aplicação..env.example:21, src/app/layout.tsx:41-58
METADATA_DESCRIPTIONDescrição da aplicação..env.example:22, src/app/layout.tsx:42-58
METADATA_KEYWORDSKeywords da aplicação..env.example:23, src/app/layout.tsx:44-58
METADATA_FAVICON_URLBase do favicon..env.example:24, src/app/layout.tsx:68
ANALYTICS_GOOGLE_IDGoogle Analytics..env.example:26, src/app/layout.tsx:51, src/app/layout.tsx:90

Variáveis adicionais observadas no código/runtime

VariávelUso observadoEvidência
SUBMISSIONS_URLBase do serviço de submissões.src/utils/consts.ts:10-11, src/app/api/submissions/route.ts:1-19
SUBMISSIONS_APP_KEYCredencial do serviço de submissões.src/utils/consts.ts:10-11, src/app/api/submissions/route.ts:9-18
SUBMISSIONS_STORAGE_URLProxy/links de arquivos de submissão.src/app/api/submissions/files/[...path]/route.ts:17, src/app/api/download/route.ts:19
QUIZ_API_URLBase da API de quiz entregue por /api/envs.next.config.js:32-35, src/app/api/envs/route.ts:23-25, src/services/quizApi.ts:20-33
BLIP_APP_KEYChave do chat Blip entregue por /api/blip/config.src/app/api/blip/config/route.ts:3-9, src/components/AttendanceButton/AttendanceButton.component.tsx:56-69
NEXT_APP_VERSIONExposta em /api/health e /api/envs.src/app/api/health/route.ts:6-19, src/app/api/envs/route.ts:7-8
NEXT_DHEDALOS_PRIVACY_POLICYExposta em /api/envs.src/app/api/envs/route.ts:8-10, helm/templates/secret.yaml:24
NEXT_DATADOG_*Expostas em /api/envs para Datadog no cliente.src/app/api/envs/route.ts:10-21, helm/templates/secret.yaml:25-28
NEXT_PUBLIC_E2E_TEST_MODEAtiva mocks de E2E no frontend.package.json:8-11, src/mocks/e2e-fixtures.ts:139, src/components/E2EFixturesProvider/E2EFixturesProvider.tsx:16

Contexto C4 L1

Atores

  • Usuário não autenticado: acessa a raiz / e recebe a tela de login.
  • Participante (subscriber): navega pelos fluxos protegidos e pode usar agenda, quiz, atividades e sala.
  • Facilitador ou supervisor: usa fluxos protegidos e integrações de agenda/sala com capacidades adicionais.

Evidências:

  • src/app/page.tsx:8-27
  • src/utils/authOptions.ts:71-87
  • src/app/(protected-routes)/home/page.tsx:38-64

Integrações externas

  • Backend WordPress/Dhedalos: API_URL alimenta wpRequest e serviços de turma, presença, salas e logs.
  • Schedule Manager: SCHEDULE_URL e SCHEDULE_APP_KEY alimentam agenda e agendamentos.
  • Serviço de submissões: /api/submissions repassa para SUBMISSIONS_URL.
  • Jitsi: /api/jitsi/config expõe o host da videoconferência.
  • Quiz API: QUIZ_API_URL sai de /api/envs e é consumida por src/services/quizApi.ts.
  • Blip Chat: BLIP_APP_KEY sai de /api/blip/config e é usado pelo widget de atendimento.
  • Datadog e Google Analytics: inicializados no layout/startup.

Evidências:

  • src/app/services/api.ts:115-185
  • src/app/services/external/ScheduleService.ts:15-116
  • src/app/api/submissions/route.ts:4-90
  • src/app/api/jitsi/config/route.ts:3-18
  • src/services/quizApi.ts:19-124
  • src/components/AttendanceButton/AttendanceButton.component.tsx:56-82
  • src/app/start/DatadogStart.tsx:10-48
  • src/app/layout.tsx:51-90

Dependências principais

  • next, react, next-auth, @mui/material
  • storybook, jest e cypress como ferramentas de desenvolvimento; vitest aparece configurado para o addon de testes do Storybook, sem script npm dedicado
  • @datadog/browser-rum, @datadog/browser-logs, @jitsi/react-sdk, blip-chat-widget
  • Helm, Kubernetes e Docker na entrega

Evidências:

  • package.json:23-108
  • .github/workflows/ci-cd-pipeline.yml:13-124
  • .github/workflows/cypress.yml:11-104
  • helm/templates/secret.yaml:11-30

Ferramentas de frontend

Storybook

  • Usado para documentação visual e stories em src/**/*.mdx e src/**/*.stories.*.
  • Scripts disponíveis: npm run storybook e npm run build-storybook.
  • Addons ativos hoje: @storybook/addon-onboarding, @storybook/addon-docs, @storybook/addon-vitest e @chromatic-com/storybook.

Evidências:

  • package.json:17-18
  • .storybook/main.ts:3-27

Jest

  • Runner principal de testes unitários.
  • Configurado com ts-jest, ambiente jsdom, collectCoverage: true e mocks para canvas.
  • Scripts disponíveis: npm test e npm run test:watch.

Evidências:

  • package.json:15-16
  • jest.config.ts:1-51

Cypress

  • Ferramenta de testes E2E do repositório.
  • Scripts disponíveis: npm run cypress:open, npm run cypress:run, npm run cypress:open:e2e e npm run cypress:run:e2e.
  • A configuração usa baseUrl, projectId, retries e gravação de vídeo.

Evidências:

  • package.json:19-22
  • cypress.config.js:1-28

Vitest

  • Há configuração de vitest no projeto, mas ela está ligada ao addon de testes do Storybook.
  • O arquivo vitest.config.ts usa @storybook/addon-vitest com browser tests via Playwright.
  • Não há script npm dedicado para execução direta de vitest no package.json.

Evidências:

  • package.json:5-22
  • vitest.config.ts:1-37

Documentação

  • Repositório atual identificado no histórico público: dhedalos/dhedalos-app-frontend-nextjs
  • Serviços relacionados identificados por nome em deployment, sem URL Git confirmada neste repositório: dhedalos-app-backend-wp, dhedalos-app-laravel-schedule-manager, dhedalos-quiz-api

Evidências:

  • CHANGELOG.md:10-18
  • helm/templates/secret.yaml:19-23

Práticas complementares

  • Storybook: presente em scripts, configuração .storybook e documentação MDX; os addons ativos hoje são @storybook/addon-onboarding, @storybook/addon-docs, @storybook/addon-vitest e @chromatic-com/storybook.
  • JSDoc e docstrings em TypeScript: presentes em serviços e componentes como ClassService, ScheduleService, MeetRoom e AtendimentoButton.
  • Mindmap: baseline criado em docs/architecture/mindmap.md.

Evidências:

  • package.json:17-18
  • .storybook/main.ts:3-27
  • src/stories/DocumentacaoProjeto.mdx:91-145
  • src/app/services/external/ClassService.ts:16-33
  • src/app/services/external/ScheduleService.ts:9-52
  • src/components/MeetRoom/MeetRoom.component.tsx:51-70
  • src/components/AttendanceButton/AttendanceButton.component.tsx:18-52

Pendências

  • Confirmar URLs Git dos repositórios relacionados ao backend WordPress, Schedule Manager e Quiz API.
  • Alinhar a nomenclatura entre variáveis de Datadog/privacidade do .env.example e as variantes NEXT_* consumidas por /api/envs.
  • Expandir o contrato OpenAPI para todas as rotas de negócio em src/app/api.