package infra import "net/http" // HTTPMiddlewareChain compone N middlewares en uno solo aplicandolos de izquierda a derecha. // El primer middleware de la lista es el mas externo (se ejecuta primero). // Si no se pasan middlewares retorna un Middleware que no modifica el handler. func HTTPMiddlewareChain(middlewares ...Middleware) Middleware { return func(final http.Handler) http.Handler { // Aplicar en orden inverso para que el primero quede mas externo h := final for i := len(middlewares) - 1; i >= 0; i-- { h = middlewares[i](h) } return h } }