41 lines
1.9 KiB
Markdown
41 lines
1.9 KiB
Markdown
# Frontend – Convenções Anti-Erro
|
||
|
||
## 1) Chamadas de API (padrão obrigatório)
|
||
|
||
**Use `src/lib/api.ts` como única porta de entrada para HTTP.**
|
||
|
||
Padrão atual:
|
||
- Use `apiRequest<T>(endpoint, options)` para qualquer fetch.
|
||
- Token vem do `localStorage` (`auth_token` ou `token`) e é enviado no header `Authorization: Bearer`.
|
||
- `Content-Type` é JSON sempre que houver `body`.
|
||
- `credentials: "include"` está ativado (cookies compartilhados).
|
||
- Erros retornam `Error` com `message` do backend, quando disponível.
|
||
|
||
> **Não** chame `fetch` direto em páginas/componentes.
|
||
> **Sempre** centralize novas rotas em `src/lib/api.ts` (ex.: `usersApi`, `jobsApi`, etc.).
|
||
|
||
Referência: `frontend/src/lib/api.ts`.
|
||
|
||
## 2) Traduções (i18n sem quebra de build)
|
||
|
||
### UI do frontend (Next.js)
|
||
- As strings usadas por `useTranslation` estão em **`frontend/src/i18n`** (`en.json`, `es.json`, `pt-BR.json`).
|
||
- **Regra**: qualquer nova chave deve existir em **todos** os arquivos de idioma para evitar fallback inconsistente.
|
||
|
||
### Catálogo geral
|
||
- Existe um catálogo amplo em `frontend/messages` (ex.: `pt-BR.json`, `en-US.json`, `es-ES.json`, `ja-JP.json`).
|
||
- Se você adicionar uma nova chave nesse catálogo, replique nas outras línguas **no mesmo caminho de objeto**.
|
||
|
||
Referências: `frontend/src/lib/i18n.tsx`, `frontend/src/i18n/*.json`, `frontend/messages/*.json`.
|
||
|
||
## 3) Componentes de formulário (padrão JobFormBuilder)
|
||
|
||
Todos os formulários com perguntas dinâmicas devem seguir o padrão de `JobFormBuilder`:
|
||
- Tipo `Question` com `id`, `type`, `label`, `required` e `options` (quando aplicável).
|
||
- `type` permitido: `text`, `long_text`, `yes_no`, `multiple_choice`, `select`.
|
||
- `options` existe apenas para `multiple_choice` e `select`.
|
||
- Respeite o limite `maxQuestions` (default 7).
|
||
- UI deve usar componentes de `components/ui` e manter o campo fixo de currículo (CV) como referência visual.
|
||
|
||
Referência: `frontend/src/components/job-form-builder.tsx`.
|
||
|