Skip to content

[WIP] Implement improvements to validation, context, health, and error handling#11

Closed
imlargo with Copilot wants to merge 1 commit into
iterationfrom
copilot/improve-validation-context-health-errors
Closed

[WIP] Implement improvements to validation, context, health, and error handling#11
imlargo with Copilot wants to merge 1 commit into
iterationfrom
copilot/improve-validation-context-health-errors

Conversation

Copilot AI commented Jan 31, 2026

Copy link
Copy Markdown
Contributor

Thanks for asking me to work on this. I will get started on it and keep this PR's description up to date as I form a plan and make progress.

Original prompt

Mejoras de Framework: Validación, Context, Health, Errores y Request ID

Objetivo

Implementar mejoras fundamentales en el framework Medusa para mejorar la Developer Experience y mantener la filosofía "Batteries Included, Decisions Optional".

Problemas a Resolver

1. Validación Inconsistente

Problema Actual:

  • Los DTOs no tienen tags de validación (binding:"required,email")
  • Errores de validación no están formateados de forma user-friendly
  • No hay helper para formatear errores de validator.ValidationErrors

Solución:

  • Agregar tags de validación a todos los DTOs existentes
  • Crear helper ErrorValidation que formatee errores de validator
  • Documentar patrones de validación

Archivos a modificar:

  • internal/dto/auth.go - Agregar tags binding
  • pkg/medusa/core/responses/validation.go - NUEVO archivo con helpers
  • internal/handlers/auth.go - Usar nuevo helper

2. Medusa Context Wrapper

Problema Actual:

  • Handlers tienen mucho boilerplate repetitivo
  • Extracción de user ID es manual y propensa a errores
  • Binding y validación requieren múltiples líneas
  • No hay helpers para parámetros tipados

Solución:

  • Crear pkg/medusa/context.go con wrapper sobre gin.Context
  • Helpers para: GetUserID(), MustGetUserID(), BindJSON(), GetParamUint()
  • Response helpers: OK(), Created(), BadRequest(), NotFound()
  • Middleware para inyectar context

Archivos nuevos:

  • pkg/medusa/context.go - Context principal
  • pkg/medusa/context_user.go - Helpers de autenticación
  • pkg/medusa/context_binding.go - Helpers de binding/validación
  • pkg/medusa/context_response.go - Helpers de respuestas
  • pkg/medusa/constants.go - Constantes de context keys
  • pkg/medusa/middleware/context.go - Middleware de inyección

3. Health Checks Básicos

Problema Actual:

  • Solo existe endpoint /health que retorna "ok"
  • No verifica dependencias (DB, Redis, RabbitMQ)
  • No hay endpoints /health/ready y /health/live (Kubernetes)

Solución:

  • Sistema de health checkers para cada dependencia
  • Endpoints separados para liveness y readiness
  • Respuesta estructurada con estado de cada dependencia

Archivos nuevos:

  • pkg/medusa/core/health/health.go - Sistema de health checks
  • pkg/medusa/core/health/checkers.go - Checkers predefinidos
  • pkg/medusa/core/handler/health.go - ACTUALIZAR con nuevos endpoints

4. Manejo de Errores Mejorado

Problema Actual:

  • Errores de validación se pierden (solo "Invalid request payload")
  • No hay código de error VALIDATION_ERROR
  • Detalles de errores no son consistentes

Solución:

  • Agregar VALIDATION_ERROR error code
  • Mejorar formateo de errores de validación
  • Helper específico para errores de validación

Archivos a modificar:

  • pkg/medusa/core/responses/error.go - Agregar VALIDATION_ERROR
  • pkg/medusa/core/responses/validation.go - NUEVO con formateo

5. Request ID Middleware

Problema Actual:

  • No existe middleware de Request ID (mencionado en roadmap)
  • Logs no tienen tracking de requests
  • Imposible seguir un request a través del sistema

Solución:

  • Middleware que genera/extrae Request ID
  • Constante RequestIDContextKey
  • Helper en Context para obtener Request ID
  • Logs incluyen Request ID automáticamente

Archivos nuevos:

  • pkg/medusa/middleware/request_id.go - Middleware
  • Actualizar pkg/medusa/context.go con GetRequestID()

6. Handlers Genéricos/Base

Problema Actual:

  • Cada handler repite la misma estructura
  • No hay utilities comunes para handlers

Solución:

  • Mejorar pkg/medusa/core/handler/handler.go
  • Agregar helpers comunes que todos los handlers pueden usar

Implementación

Estructura de Archivos Nuevos

pkg/medusa/
├── context.go              # Context wrapper principal
├── context_user.go         # Helpers de usuario/auth
├── context_binding.go      # Helpers de binding/validación
├── context_response.go     # Helpers de respuestas
├── constants.go            # Constantes compartidas
│
├── core/
│   ├── health/
│   │   ├── health.go      # Sistema de health checks
│   │   └── checkers.go    # Database, Redis, etc checkers
│   │
│   ├── handler/
│   │   └── health.go      # ACTUALIZAR con ready/live
│   │
│   └── responses/
│       └── validation.go   # NUEVO - formateo de validación
│
└── middleware/
    ├── context.go          # Middleware de inyección de context
    └── request_id.go       # Middleware de Request ID

Filosofía de Diseño

IMPORTANTE: Mantener la filosofía "Batteries Included, Decisions Optional"

SÍ hacer:

  • Proveer helpers opcionales que reducen boilerplate
  • Usar librerías estándar (validator, gin) sin ocultarlas
  • Mantener compatibilidad completa con Gin
  • Documentar tanto uso manual como con helpers
  • Permitir que usuarios usen gin.Context directamente

NO hacer:

  • Ocultar comportamiento detrás de abstracciones pesadas
  • Forzar uso de helpers
  • Reimplementar lo que ya e...

This pull request was created from Copilot chat.


💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants