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() } }