Feature: Group Redirect
Introdução ao documento
Este documento descreve a feature de redirecionamento para grupo exposta em /grupo/{uid}, responsável por decodificar um identificador e resolver a URL final do grupo.
Evidências:
../../app/grupo/[uid]/page.tsx#L12-L42../../src/features/api/external/wp/getGroupLink/getGroupLink.ts#L5-L37
Versionamento
Atualizar este documento quando mudarem:
- o encoding do
uid; - o contrato de
getGroupLink; - a estratégia de erro ou redirecionamento.
Evidências:
../../app/grupo/[uid]/page.tsx#L12-L41../../src/features/api/external/wp/getGroupLink/getGroupLink.ts#L16-L35
Referencial teórico
O mapeamento desta feature foi derivado da rota grupo, do utilitário de decodificação e do adapter de resolução do link final.
Evidências:
../../app/grupo/[uid]/page.tsx#L1-L13../../src/features/api/external/wp/getGroupLink/getGroupLink.ts#L5-L37
Visão geral
- A rota recebe
uid, converte o valor combase64UrlDecode, buscagroup_linke redireciona o participante quando a URL existe (app/grupo/[uid]/page.tsx#L12-L13, app/grupo/[uid]/page.tsx#L41-L41). - Quando a resolução falha, a feature mostra uma tela de erro de negócio (app/grupo/[uid]/page.tsx#L17-L38).
Atores
- Participante que acessa o link codificado (app/grupo/[uid]/page.tsx#L12-L13).
- App Next.js server-side (app/grupo/[uid]/page.tsx#L12-L41).
- Backend WordPress responsável pela resolução de grupo (getGroupLink.ts#L16-L31).
Pré-condições
- A rota precisa receber um
uidque possa ser decodificado porbase64UrlDecode(app/grupo/[uid]/page.tsx#L1-L3, app/grupo/[uid]/page.tsx#L12-L13). - O backend externo precisa retornar
group_linkpara que oredirect()seja executado (app/grupo/[uid]/page.tsx#L17-L18, getGroupLink.ts#L27-L31).
Fluxo principal
- A rota recebe
uid(app/grupo/[uid]/page.tsx#L12-L12). - Decodifica o valor e chama
getGroupLink(enroll_id)(app/grupo/[uid]/page.tsx#L12-L13). - Se
group_linkexistir, redireciona o navegador (app/grupo/[uid]/page.tsx#L41-L41).
Fluxos alternativos
- Se
group_linknão vier, a feature renderiza uma tela com mensagemOcorreu um erro ao obter dados do grupo - parâmetros ou inscrição inválida.(app/grupo/[uid]/page.tsx#L17-L38). - Se o adapter externo receber resposta não-OK ou erro de rede, ele retorna
null, o que também leva a tela de erro (getGroupLink.ts#L21-L24, getGroupLink.ts#L33-L35).
Regras de negócio
- O identificador de grupo usado pela integração é
enroll_idderivado douiddecodificado (app/grupo/[uid]/page.tsx#L12-L13, getGroupLink.ts#L5-L19). - O redirecionamento só ocorre quando
groupLink?.group_linkestiver presente (app/grupo/[uid]/page.tsx#L17-L18, app/grupo/[uid]/page.tsx#L41-L41). - Respostas não-OK do backend WordPress são degradadas para
nullem vez de exceção propagada (getGroupLink.ts#L21-L24).
Estados possíveis
group_linkresolvido / não resolvido (app/grupo/[uid]/page.tsx#L17-L18, app/grupo/[uid]/page.tsx#L41-L41).- Adapter externo
ok/null(getGroupLink.ts#L21-L31, getGroupLink.ts#L33-L35).
Endpoints envolvidos
- O fluxo principal não usa endpoint interno documentado no OpenAPI; a resolução acontece via adapter externo
getGroupLink(app/grupo/[uid]/page.tsx#L12-L13, getGroupLink.ts#L16-L31). - Referência de contrato interno disponível:
OpenAPI, sem path correspondente para grupo.
Dados impactados
- A feature consome
GroupLinke depende semanticamente deEnrollmentSnapshotpelo uso deenroll_id(getGroupLink.ts#L27-L31).
Pendências
- Não há endpoint interno
/groupdocumentado no OpenAPI atual. - A semântica exata entre
uid,enroll_ideenrollment_idcontinua dependente de contrato externo.
Evidências: