Adicionado doc pós refatoração

Rafael Alves Lopes 2026-06-02 09:08:14 -03:00
parent 1c1335a005
commit abb90be652
4 changed files with 85 additions and 18 deletions

@ -53,7 +53,7 @@ O fragmento nao e enviado ao servidor HTTP. O frontend:
4. limpa a URL;
5. navega para `/home`.
## Armazenamento da sessao
## Armazenamento da sessao
O frontend salva:
@ -62,23 +62,35 @@ sessionStorage.authToken
sessionStorage.authUser
```
Nao usa mais `localStorage` para token ou usuario.
Nao usa mais `localStorage` para token ou usuario.
Motivo:
- a sessao nao fica persistida apos fechar o navegador;
- reduz risco de reaproveitar sessao antiga;
- evita mocks locais antigos de perfil.
- evita mocks locais antigos de perfil.
## Validade do JWT
Antes de considerar o usuario autenticado, o frontend decodifica o payload do JWT e valida o campo `exp`.
Se o token estiver ausente, invalido ou expirado:
- `authToken` e `authUser` sao removidos;
- a rota protegida redireciona para `/login`;
- chamadas API que retornam `401` tambem limpam a sessao.
## Bearer token
## Bearer token
O arquivo `src/shared/services/authFetch.js` instala um interceptador global de `fetch`.
Para chamadas feitas contra `VITE_API_URL`, ele adiciona:
Para chamadas feitas contra `VITE_API_URL`, ele adiciona:
```http
Authorization: Bearer <token>
```
Authorization: Bearer <token>
```
Se o backend responder `401`, o interceptador limpa a sessao e envia o usuario para `/login`.
## Logout

@ -13,6 +13,14 @@ HTTP e usado para:
- baixar midia;
- consultar status.
As chamadas HTTP do chat ficam centralizadas em:
```text
src/modules/chat/services/whatsappChatService.js
```
Esse service usa `src/shared/services/apiClient.js`, entao herda parse de resposta, tratamento padronizado de erro e Bearer Token via interceptor global.
Socket.IO e usado para:
- receber QR Code;
@ -75,6 +83,26 @@ message
O hook `useWhatsappSocket` armazena a ultima mensagem recebida para o chat atualizar a conversa.
## Hook de chat
Arquivo:
```text
src/modules/chat/hooks/useChat.js
```
Responsavel por:
- normalizar chats e mensagens para a UI;
- manter conversa ativa, rascunho e anexos;
- aplicar permissao visual de fila/area/perfil;
- impedir resposta quando o atendimento nao esta assumido;
- impedir nova mensagem quando aguarda resposta do cliente;
- orquestrar assumir, liberar, fechar e transferir atendimento;
- hidratar midia sob demanda.
O hook mantem regra de tela e estado local. A borda HTTP fica em `whatsappChatService.js`.
## Observacao
Mesmo com Socket.IO, as acoes sensiveis continuam acontecendo por HTTP protegido com Bearer token.

@ -65,6 +65,30 @@ O modulo `management` usa estado local por tela/componente.
Servicos em `src/modules/management/services` fazem a comunicacao com a API e retornam dados normalizados.
## Services HTTP
Arquivo principal:
```text
src/shared/services/apiClient.js
```
Responsavel por:
- montar URL a partir de `VITE_API_URL`;
- aplicar `Content-Type: application/json` quando necessario;
- fazer parse de JSON/texto;
- padronizar mensagens de erro;
- preservar `status` e `payload` no erro.
O Bearer Token nao fica espalhado pelos services. Ele e anexado pelo interceptor:
```text
src/shared/services/authFetch.js
```
Quando a API retorna `401`, a sessao e limpa e o usuario volta para `/login`.
## Diretriz
Antes de adicionar uma ferramenta global de estado, prefira:

@ -10,17 +10,17 @@ src/routes/router.jsx
Rotas:
| Rota | Tela | Protegida |
|---|---|---|
| `/` | redireciona para `/login` | nao |
| `/login` | LoginPage | nao |
| `/home` | ProfileHomePage | sim |
| `/chat` | ChatPage | sim |
| `/call` | CallPage | sim |
| `/new-attendance` | AgentNewAttendancePage | sim |
| `/mass-message` | AgentMassMessagePage | sim |
| `/contacts` | ContactsPage | sim |
| `/admin/whatsapp` | WhatsappAdminPage | sim |
| Rota | Tela | Protegida | Perfis |
|---|---|---|---|
| `/` | redireciona para `/login` | nao | publico |
| `/login` | LoginPage | nao | publico |
| `/home` | ProfileHomePage | sim | autenticado |
| `/chat` | ChatPage | sim | autenticado |
| `/call` | CallPage | sim | autenticado |
| `/new-attendance` | AgentNewAttendancePage | sim | autenticado |
| `/mass-message` | AgentMassMessagePage | sim | autenticado |
| `/contacts` | ContactsPage | sim | autenticado |
| `/admin/whatsapp` | WhatsappAdminPage | sim | admin |
## ProtectedRoute
@ -33,7 +33,10 @@ src/routes/ProtectedRoute.jsx
Responsabilidade:
- verificar se existe `authToken` e `authUser` em `sessionStorage`;
- validar se o JWT ainda esta dentro do prazo pelo campo `exp`;
- redirecionar para `/login` quando nao houver sessao;
- preservar a rota de origem em `state.from` para voltar apos login;
- redirecionar para `/home` quando a rota exigir um perfil que o usuario nao tem;
- impedir que `/home` renderize telas mockadas sem login.
## Resolucao de perfil