- 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>
66 lines
2.4 KiB
Markdown
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.
|