Files
backend_v2/internal/pkg/response/response.go
toom1996 30c9f21da4 update
2026-08-26 10:45:21 +08:00

53 lines
1.4 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Package response 统一 HTTP 响应结构。
//
// 响应形状严格沿用原项目,前端 (src/lib/api.ts、data.ts) 依赖这些字段名:
// - 列表:{ data, total, current_page, last_page, per_page }
// - 详情:{ data }
// - 错误:{ error }
//
// 集中在此处定义,避免各 handler 手写 gin.H 时出现字段拼写漂移。
package response
import "github.com/gin-gonic/gin"
// Data 返回单个对象:{ "data": v }。
func Data(c *gin.Context, status int, v any) {
c.JSON(status, gin.H{"data": v})
}
// Page 返回分页列表:{ data, total, current_page, last_page, per_page }。
func Page(c *gin.Context, status int, data any, total int64, page, size int) {
c.JSON(status, gin.H{
"data": data,
"total": total,
"current_page": page,
"last_page": LastPage(total, size),
"per_page": size,
})
}
// Error 返回错误:{ "error": msg }。
func Error(c *gin.Context, status int, msg string) {
c.JSON(status, gin.H{"error": msg})
}
// AbortError 中断请求并返回错误,供中间件使用。
func AbortError(c *gin.Context, status int, msg string) {
c.AbortWithStatusJSON(status, gin.H{"error": msg})
}
// LastPage 计算总页数;无数据时返回 1(与原项目一致,避免前端出现 0 页)。
func LastPage(total int64, size int) int {
if size <= 0 {
return 1
}
last := int(total) / size
if int(total)%size > 0 {
last++
}
if last == 0 {
last = 1
}
return last
}