Files

31 lines
980 B
Go
Raw Permalink Normal View History

package middleware
import (
"log"
"net/http"
"runtime/debug"
"github.com/gin-gonic/gin"
"dating-app/internal/utils"
)
// Recovery از کرش کردن کل پروسه به‌خاطر panic غیرمنتظره‌ی یک هندلر
// (nil pointer، index out of range و...) جلوگیری می‌کنه: استک‌تریس رو لاگ
// می‌کنه و به‌جای متن ساده‌ی پیش‌فرض Gin، همون envelope استاندارد JSON
// پروژه (utils.Fail) رو برمی‌گردونه تا کلاینت‌ها فرمت یکسانی ببینن.
func Recovery() gin.HandlerFunc {
return func(c *gin.Context) {
defer func() {
if r := recover(); r != nil {
log.Printf("[PANIC RECOVERED] %v\n%s", r, debug.Stack())
if !c.Writer.Written() {
utils.Fail(c, http.StatusInternalServerError, "خطای غیرمنتظره‌ای رخ داد؛ لطفاً دوباره امتحان کن", nil)
}
c.Abort()
}
}()
c.Next()
}
}