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

1.9 KiB
Raw Blame History

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.