package middleware import ( "net/http" "runtime/debug" "github.com/gin-gonic/gin" "go.uber.org/zap" ) func Recovery(logger *zap.Logger) gin.HandlerFunc { return func(c *gin.Context) { defer func() { if r := recover(); r != nil { logger.Error("panic recovered", zap.Any("error", r), zap.String("stack", string(debug.Stack())), zap.String("request_id", RequestIDFromGin(c)), ) c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{ "code": 50000, "message": "internal_error", "detail": "An unexpected error occurred", "request_id": RequestIDFromGin(c), }) } }() c.Next() } }