Files
2026-01-19 12:12:29 +07:00

47 lines
1.1 KiB
Go

package middleware
import (
"log"
"net/http"
"runtime/debug"
"github.com/gin-gonic/gin"
"stream.api/pkg/response"
)
// ErrorHandler is a middleware that handles errors attached to the context
func ErrorHandler() gin.HandlerFunc {
return func(c *gin.Context) {
c.Next()
// If there are errors in the context
if len(c.Errors) > 0 {
// Log all errors
for _, e := range c.Errors {
log.Printf("Error: %v", e)
}
// Return the last error to the client using standard response
// We can improve this map to specific status codes if we have custom error types
lastError := c.Errors.Last()
response.Error(c, http.StatusInternalServerError, lastError.Error())
}
}
}
// Recovery is a middleware that recovers from panics and returns a 500 error
func Recovery() gin.HandlerFunc {
return func(c *gin.Context) {
defer func() {
if err := recover(); err != nil {
// Log the stack trace
log.Printf("Panic recovered: %v\n%s", err, debug.Stack())
// Return 500 error using standard response
response.Fail(c, "Internal Server Error")
}
}()
c.Next()
}
}