geradoresfe
Frontend React 19 + Vite + Tailwind CSS 4 + TypeScript. A UI não conhece os tipos de gerador: lê
/api/v1/generators e constrói as páginas e os formulários de opções a partir dos metadados da
API.
Desenvolvimento
npm install
npm run dev # http://localhost:3000
O Vite faz proxy de /api, /docs e /openapi para http://localhost:5053
(dotnet run --project GeradoresWS --launch-profile http). Para outro backend:
API_PROXY_TARGET=http://host:porta npm run dev.
| Script | Descrição |
|---|---|
npm run dev |
Servidor de desenvolvimento |
npm run build |
Type-check (tsc -b) e build de produção em dist/ |
npm run lint |
ESLint |
npm test |
Vitest |
npm run preview |
Serve o build localmente |
Páginas
| Rota | Página |
|---|---|
/ |
Lista de geradores por categoria |
/gerador/:id |
Opções, geração em lote (até 1000), cópia e exportação CSV/JSON/TXT |
/validar |
Validador livre: detecta o tipo e explica porque é (in)válido |
/NIF, /NISS, /CC |
Redireccionam para as rotas novas |
Estrutura
| Caminho | Conteúdo |
|---|---|
src/lib/api.ts |
Cliente da API e tipos |
src/lib/useGenerators.tsx |
Contexto que carrega a lista de geradores uma vez |
src/lib/export.ts |
Exportação CSV/JSON/TXT (testado em export.test.ts) |
src/pages/ |
Páginas das rotas |
src/components/ |
Cartões, formulário de opções, validador, resultados |
src/components/ui/ |
Componentes base (botão, input, select, badge, …) |
src/layout/ |
Cabeçalho, rodapé e layout |
src/context/ThemeContext.tsx |
Modo claro/escuro |
API
Por omissão o cliente usa caminhos relativos (/api/v1). Em dev é o proxy do Vite; em produção é o nginx.
VITE_API_URL (em build time) permite apontar para outro host.
Docker
docker build -t geradoresfe .
docker run -p 3000:80 -e API_UPSTREAM=http://geradoresws:8080 geradoresfe
A imagem serve o build com nginx. O nginx.conf.template é processado com envsubst no arranque, e
/api, /docs e /openapi são encaminhados para API_UPSTREAM (por omissão http://geradoresws:8080).
A mesma imagem serve em qualquer ambiente sem rebuild. Os ficheiros em /assets/ têm cache longa e o resto
cai no index.html (SPA).