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>
This commit is contained in:
68
README.md
68
README.md
@@ -1,7 +1,65 @@
|
||||
# Geradores
|
||||
# Factory Id — Geradores
|
||||
|
||||
<code> docker build -t shini89/geradoresws ..</code>
|
||||
<code> docker run --rm -p 44329:8080 shini89/geradoresws</code>
|
||||
<code>npx swagger-typescript-api generate -p http://localhost:29191/swagger/v1/swagger.json -o src/service -n api.ts --enum-names-as-values</code>
|
||||
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.
|
||||
|
||||
npx swagger-typescript-api generate -p http://localhost:29191/swagger/v1/swagger.json -o src/service -n api.ts --http-client axios --enum-names-as-values
|
||||
- **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.
|
||||
|
||||
Reference in New Issue
Block a user