Frontend Web - Marketplace de Cursos¶
Objetivo¶
Consolidar a documentação das mudanças de frontend para o novo domínio de cursos, alinhado ao backend refatorado.
Diretriz principal¶
Consumir catálogo por chamada agregada:
GET /marketplace/catalog
Evitar composição de catálogo com múltiplas requests fragmentadas.
Estrutura de módulos adicionada/atualizada¶
Data layer de marketplace¶
src/modules/marketplace/hooks/useMarketplaceCatalog.tssrc/modules/marketplace/services/marketplace.service.tssrc/modules/marketplace/types/index.ts
Área Admin (cursos)¶
src/modules/admin/marketplace/hub/page.tsx(hub administrativo com seções Cursos, Vendas e Marketing)src/modules/admin/courses/review/page.tsxsrc/modules/admin/courses/orders/page.tsxcom atalho de pré-visualização por pedido (player + materiais)src/modules/admin/courses/revenue/page.tsxsrc/modules/admin/courses/bundles/page.tsxsrc/modules/admin/courses/recommendations/page.tsxsrc/modules/admin/courses/reviews/page.tsxsrc/modules/admin/courses/review-logs/page.tsxsrc/modules/admin/courses/review/page.tsxcom modo de pré-visualização como cliente (player + módulos/aulas + materiais)
Área Profissional¶
src/modules/professional/educational/hub/page.tsxsrc/modules/professional/courses/page.tsxsrc/modules/professional/course-editor/page.tsxsrc/modules/professional/course-sales/page.tsxsrc/modules/professional/course-revenue/page.tsxsrc/modules/professional/course-materials/page.tsxsrc/modules/professional/bundles/page.tsxsrc/modules/professional/courses/page.tsxcom ação de exclusão lógica e acompanhamento de progresso da remoção assíncrona de vídeos
Área Cliente¶
src/modules/client/learning/hub/page.tsxsrc/modules/courses/catalog/page.tsxsrc/modules/courses/course-detail/page.tsxsrc/modules/client/course-checkout/page.tsxsrc/modules/client/my-courses/page.tsxsrc/modules/client/learn-course/page.tsxsrc/modules/client/bundles/page.tsxsrc/modules/client/bundle-details/page.tsx
Contratos frontend atualizados¶
Arquivo central de tipos:
src/types/index.ts
Pontos obrigatórios:
- Transporte monetário em centavos (
*_amount_cents). - Vídeo genérico por provedor (
video_provider,video_upload_id,video_asset_id,video_playback_id). - Sem dependência de
course.durationpersistido. - Duração do curso por
total_duration_sec.
Rotas por papel (resumo)¶
Cliente¶
/client/aprendizado/courses/courses/:id/courses/:id/checkout/bundles/bundles/:id/my-courses/learn/:enrollmentId
Profissional¶
/professional/educacional/professional/courses/professional/courses/new/professional/courses/:id/edit/professional/courses/:id/sales/professional/courses/:id/revenue/professional/course-materials/professional/bundles
Admin¶
/admin/marketplace/admin/courses/review/admin/courses/orders/admin/courses/commissions/admin/courses/revenue/admin/courses/bundles/admin/courses/recommendations/admin/courses/reviews/admin/courses/review-logs
Permissionamento por módulo no frontend¶
Chaves utilizadas¶
educacional.cursos.catalogoeducacional.cursos.playereducacional.cursos.bundleseducacional.cursos.reviewseducacional.cursos.profissional.gestaoeducacional.cursos.profissional.recomendacoeseducacional.cursos.profissional.bundleseducacional.cursos.profissional.materiaiseducacional.cursos.profissional.revenue
Pontos de aplicação¶
src/routes/clientRoutes.tsxsrc/routes/professionalRoutes.tsxsrc/components/Sidebar.tsxsrc/routes/routePreload.tssrc/modules/admin/module-management/settings/view.tsx(árvore recursiva)
Fluxos principais cobertos¶
- Catálogo unificado: cursos + bundles + recomendações.
- Checkout de curso e bundle.
- Player com progresso por aula e progresso de curso derivado.
- Materiais de aula no player e na gestão profissional.
- Reviews de curso (cliente) e moderação (admin).
- Bundles e recomendações (admin/profissional).
- Revenue split visível em pedidos/vendas.
- Admin consegue reproduzir vídeos de aulas em revisão usando endpoint de playback administrativo.
- Admin consegue pré-visualizar curso vendido diretamente na tela de pedidos.
- Admin consegue visualizar a vitrine publicada do marketplace em tela dedicada.
- Fluxos de marketplace foram reorganizados com hubs de entrada por perfil.
- Hubs de marketplace contam com tours contextuais por perfil (admin/profissional/cliente).
Checklist de integração frontend¶
- Não usar
price_amount(apenasprice_amount_cents). - Não usar
mux_*em contratos de UI. - Ler catálogo por
useMarketplaceCatalog. - Aplicar
requiredModuleem todas as rotas de cursos. - Exibir valores monetários com formatação apenas na UI (nunca converter para float no transporte).