package service import ( "net/http" "github.com/gin-gonic/gin" ) type ResponseData struct { Code int `json:"code"` Message string `json:"message"` Data interface{} `json:"data"` } func ErrorResponse(c *gin.Context, code int, message string) { c.JSON(code, ResponseData{ Code: code, Message: message, Data: nil, }) } func SuccessResponse(c *gin.Context, code int, data interface{}) { c.JSON(code, ResponseData{ Code: code, Message: "success", Data: data, }) } func UnifiedResponseMiddleware() gin.HandlerFunc { return func(ctx *gin.Context) { ctx.Next() if len(ctx.Errors) > 0 { err := ctx.Errors.Last() ErrorResponse(ctx, http.StatusInternalServerError, err.Error()) return } if ctx.Writer.Status() == 0 { ctx.Writer.WriteHeader(http.StatusOK) } if ctx.Writer.Status() >= http.StatusOK && ctx.Writer.Status() < http.StatusMultipleChoices { data, exists := ctx.Get("response_data") if exists { SuccessResponse(ctx, ctx.Writer.Status(), data) return } } } }