53 lines
1.7 KiB
Go
53 lines
1.7 KiB
Go
// Package response 统一 HTTP 响应结构。
|
||
//
|
||
// 响应形状严格沿用原项目,前端 (src/lib/api.ts、data.ts) 依赖这些字段名:
|
||
// - 列表:{ data, last_page } // last_page 供前端真分页(页码导航)使用;total/per_page/current_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, last_page }。
|
||
//
|
||
// 只保留前端真正消费的字段:data(本页数据)与 last_page(总页数,供页码导航)。
|
||
// total / current_page / per_page 前端从无读取,移除以精简协议;last_page 仍由后端用 total 与固定 size 计算。
|
||
func Page(c *gin.Context, status int, data any, total int64, size int) {
|
||
c.JSON(status, gin.H{
|
||
"data": data,
|
||
"last_page": LastPage(total, 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
|
||
}
|