feat(infra): tipos ConfigError y ConfigValidation + funciones puras Go (validate, merge, dump)

- ConfigError y ConfigValidation como tipos producto con sus .md en types/infra/
- config_validate: validacion con tags required/format/min/max/oneof via reflection
- config_merge: merge no-mutante de map[string]string con precedencia de override
- config_dump: serializacion de structs a map con mascara *** para campos secret
- 17 tests unitarios, todos PASS

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-13 02:01:43 +02:00
parent eca52b1329
commit c3b007a4e7
13 changed files with 676 additions and 0 deletions
+21
View File
@@ -0,0 +1,21 @@
---
name: config_error
lang: go
domain: infra
version: "1.0.0"
algebraic: product
definition: |
type ConfigError struct {
Field string
Message string
Tag string
}
description: "Error de validacion de un campo de configuracion. Field identifica el campo, Message describe el problema, Tag indica la regla que fallo (required, format, etc.)."
tags: [config, validation, error, infra]
uses_types: []
file_path: "functions/infra/config_error.go"
---
## Notas
Tipo producto — todos los campos siempre presentes. Se acumula en ConfigValidation.Errors. Tag toma valores como "required" o "format" para que el consumidor pueda filtrar por tipo de error.
+20
View File
@@ -0,0 +1,20 @@
---
name: config_validation
lang: go
domain: infra
version: "1.0.0"
algebraic: product
definition: |
type ConfigValidation struct {
Errors []ConfigError
IsValid bool
}
description: "Resultado de validar una struct de configuracion. Contiene todos los errores acumulados y un bool de conveniencia. IsValid es true solo cuando Errors esta vacio."
tags: [config, validation, result, infra]
uses_types: [config_error_go_infra]
file_path: "functions/infra/config_validation.go"
---
## Notas
Tipo producto. IsValid se computa derivadamente de len(Errors)==0. Permite al consumidor tanto iterar sobre todos los errores como hacer un check rapido con IsValid.