package utils import ( "net/http" "github.com/gin-gonic/gin" ) // APIResponse 统一API响应格式 type APIResponse struct { Code int `json:"code"` Message string `json:"message"` Data interface{} `json:"data,omitempty"` Meta *MetaInfo `json:"meta,omitempty"` } // MetaInfo 分页信息 type MetaInfo struct { Page int `json:"page"` PageSize int `json:"page_size"` Total int `json:"total"` TotalPage int `json:"total_page"` } // SuccessResponse 成功响应 func SuccessResponse(c *gin.Context, statusCode int, message string, data interface{}) { response := APIResponse{ Code: statusCode, Message: message, Data: data, } c.JSON(statusCode, response) } // ErrorResponse 错误响应 func ErrorResponse(c *gin.Context, statusCode int, message string, details string) { response := APIResponse{ Code: statusCode, Message: message, Data: map[string]interface{}{"details": details}, } c.JSON(statusCode, response) } // PaginatedResponse 分页响应 func PaginatedResponse(c *gin.Context, statusCode int, message string, data interface{}, page, pageSize, total int) { totalPage := (total + pageSize - 1) / pageSize response := APIResponse{ Code: statusCode, Message: message, Data: data, Meta: &MetaInfo{ Page: page, PageSize: pageSize, Total: total, TotalPage: totalPage, }, } c.JSON(statusCode, response) } // GetPaginationParams 获取分页参数 func GetPaginationParams(c *gin.Context) (page, pageSize int) { page = 1 pageSize = 10 // 获取页码 if p := c.Query("page"); p != "" { if parsedPage, err := parseInt(p); err == nil && parsedPage > 0 { page = parsedPage } } // 获取每页数量 if ps := c.Query("page_size"); ps != "" { if parsedPageSize, err := parseInt(ps); err == nil && parsedPageSize > 0 && parsedPageSize <= 100 { pageSize = parsedPageSize } } return page, pageSize } // GetIDParam 获取ID参数 func GetIDParam(c *gin.Context) (uint, error) { idStr := c.Param("id") id, err := parseUint(idStr) if err != nil { return 0, err } return id, nil } // parseInt 解析整数 func parseInt(s string) (int, error) { var result int _, err := fmt.Sscanf(s, "%d", &result) return result, err } // parseUint 解析无符号整数 func parseUint(s string) (uint, error) { var result uint _, err := fmt.Sscanf(s, "%d", &result) return result, err }