package httputil import ( "net/http" "reflect" "github.com/gin-gonic/gin" ) // nilToEmpty converts nil slices to empty slices so JSON serializes as [] not null func nilToEmpty(data interface{}) interface{} { if data == nil { return data } v := reflect.ValueOf(data) if v.Kind() == reflect.Slice && v.IsNil() { return reflect.MakeSlice(v.Type(), 0, 0).Interface() } return data } func OK(c *gin.Context, data interface{}) { c.JSON(http.StatusOK, gin.H{"data": nilToEmpty(data)}) } func Created(c *gin.Context, data interface{}) { c.JSON(http.StatusCreated, gin.H{"data": nilToEmpty(data)}) } func NoContent(c *gin.Context) { c.Status(http.StatusNoContent) } func BadRequest(c *gin.Context, err error) { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) } func Unauthorized(c *gin.Context) { c.JSON(http.StatusUnauthorized, gin.H{"error": "unauthorized"}) } func NotFound(c *gin.Context) { c.JSON(http.StatusNotFound, gin.H{"error": "not found"}) } func InternalError(c *gin.Context, err error) { c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) }