| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- 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
- }
|