package respond import ( "net/http" "github.com/gin-gonic/gin" "go.uber.org/zap" "spark-server/internal/infrastructure/logger" "spark-server/internal/pkg/errs" "spark-server/internal/pkg/i18n" "spark-server/internal/pkg/reply" "spark-server/internal/pkg/reqctx" "spark-server/internal/pkg/validate" ) func JSON(c *gin.Context, data any) { c.JSON(http.StatusOK, reply.Stamp(c.Request.Context(), reply.OK(data))) } func JSONError(c *gin.Context, err error) { if app, ok := errs.AsAppError(err); ok && app.LogPrint { logger.From(c.Request.Context()).Error("app_error", zap.String("code", app.Code), zap.String("msg", app.Msg), zap.String("inner_msg", app.InnerMsg), ) } c.JSON(http.StatusOK, reply.FromContext(c.Request.Context(), err)) } // BindJSON decodes JSON then runs go-playground/validator. label/errmsg are i18n keys. func BindJSON(c *gin.Context, dst any) error { lang := reqctx.Lang(c.Request.Context()) if err := c.ShouldBindJSON(dst); err != nil { return errs.ErrInvalidArgument.WithMsg(i18n.T(lang, i18n.KeyValidateInvalidJSON, nil)) } return validate.StructLang(lang, dst) }