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:
@@ -0,0 +1,31 @@
|
||||
using System.Text.RegularExpressions;
|
||||
using GeradoresService.Core;
|
||||
|
||||
namespace GeradoresService.Generators.Identificacao;
|
||||
|
||||
/// <summary>
|
||||
/// Número de passaporte português: uma letra seguida de 6 dígitos.
|
||||
/// Não existe dígito de controlo público no número em si; valida-se apenas o formato.
|
||||
/// </summary>
|
||||
public sealed partial class PassaporteGenerator : GeneratorBase
|
||||
{
|
||||
public override string Id => "passaporte";
|
||||
public override string Name => "Passaporte";
|
||||
public override string Category => Categories.Identificacao;
|
||||
public override string Description => "Número de passaporte português (letra + 6 dígitos). Apenas formato.";
|
||||
public override bool HasChecksum => false;
|
||||
|
||||
public override GeneratedItem Generate(GeneratorContext context) =>
|
||||
new($"{(char)('A' + context.Random.Next(26))}{context.Digits(6)}");
|
||||
|
||||
public override ValidationResult Validate(string value)
|
||||
{
|
||||
var p = Checksums.Clean(value).ToUpperInvariant();
|
||||
return Pattern().IsMatch(p)
|
||||
? ValidationResult.Valid(p, "Formato de passaporte português válido (sem dígito de controlo).")
|
||||
: ValidationResult.WrongFormat("Formato esperado: uma letra seguida de 6 dígitos (ex.: C123456).");
|
||||
}
|
||||
|
||||
[GeneratedRegex("^[A-Z][0-9]{6}$")]
|
||||
private static partial Regex Pattern();
|
||||
}
|
||||
Reference in New Issue
Block a user