Files
Geradores/README.md
Marco Santos d7ea8a9b9e Reescrita dos geradores: biblioteca IGenerator, minimal API e novo frontend
- GeradoresService: cada tipo passa a ser um IGenerator (NIF, NIPC, NISS, CC,
  passaporte, IBAN, NIB, cartões, referência MB, pessoa, telefone, código postal,
  email, matrícula, EAN, UUID) registado em GeneratorRegistry; remove DAL/EF
- GeradoresWS: minimal APIs em /api/v1 com OpenAPI + Scalar e health check
- UnitTest: testes de ida e volta, valores conhecidos, detecção e API
- geradoresfe: UI construída a partir dos metadados da API, validador livre,
  exportação CSV/JSON/TXT, nginx com API_UPSTREAM configurável
- Docker, docker-compose e Jenkinsfile actualizados

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 23:51:39 +01:00

66 lines
2.4 KiB
Markdown

# Factory Id — Geradores
Geradores e validadores de dados portugueses para testes de software: NIF, NIPC, NISS, Cartão de Cidadão,
IBAN/NIB, cartões de pagamento, referências Multibanco, telefones, códigos postais, emails, pessoas fictícias,
matrículas, EAN e UUID.
- **Geração em lote** (até 1000 de cada vez) com exportação CSV, JSON e TXT
- **Validador livre**: cola-se um valor qualquer, o tipo é detectado e é explicado porque é (in)válido
- **API REST** documentada em `/docs`
## Estrutura
| Pasta | Conteúdo |
|---|---|
| `GeradoresService/` | Biblioteca com os algoritmos. Cada tipo é uma classe `IGenerator` em `Generators/` |
| `GeradoresWS/` | API ASP.NET Core (.NET 10, minimal APIs, OpenAPI + Scalar) |
| `UnitTest/` | Testes xUnit (algoritmos, valores conhecidos e API) |
| `geradoresfe/` | Frontend React + Vite + Tailwind. A UI é construída a partir dos metadados da API |
## Desenvolvimento
```bash
# API em http://localhost:5053 (docs em /docs)
dotnet run --project GeradoresWS --launch-profile http
# Frontend em http://localhost:3000 (faz proxy de /api para a API)
cd geradoresfe && npm install && npm run dev
```
Testes:
```bash
dotnet test UnitTest
cd geradoresfe && npm test && npm run lint
```
## Docker
```bash
docker compose up --build
# Frontend: http://localhost:3000 API directa: http://localhost:5050/docs
```
O nginx do frontend encaminha `/api`, `/docs` e `/openapi` para `API_UPSTREAM`
(por omissão `http://geradoresws:8080`), por isso a mesma imagem funciona em qualquer ambiente
sem rebuild.
## API
| Método | Rota | Descrição |
|---|---|---|
| GET | `/api/v1/generators` | Lista de geradores e opções |
| GET | `/api/v1/generators/{id}/generate?count=10&<opção>=<valor>` | Gera valores (`seed` opcional para resultados reprodutíveis) |
| GET | `/api/v1/generators/{id}/validate?value=...` | Valida um valor de um tipo |
| GET | `/api/v1/validate?value=...` | Detecta o tipo e valida |
| GET | `/health` | Health check |
Exemplo: `GET /api/v1/generators/nif/generate?count=5&tipo=5` gera 5 NIF de pessoa colectiva.
## Adicionar um gerador
1. Criar uma classe em `GeradoresService/Generators/<Categoria>/` que herde de `GeneratorBase`.
2. Registá-la em `GeneratorRegistry`.
3. Pronto: aparece na API, no frontend e é coberta automaticamente pelo teste de ida e volta
(`GeneratorRoundTripTests`), que gera valores com todas as opções e confirma que o validador os aceita.