gohorsejobs/frontend/CONVENTIONS.md
2026-02-09 22:14:36 -03:00

41 lines
1.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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`.