Files
Geradores/geradoresfe/README.md
2026-10-11 23:52:48 +01:00

64 lines
2.3 KiB
Markdown

# 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](../GeradoresWS/README.md).
## Desenvolvimento
```bash
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
```bash
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).