core/infra/response.go

54 lines
1.1 KiB
Go
Raw Normal View History

2025-10-03 19:55:20 +08:00
// Package infra 提供基础设施功能
// 包括统一响应处理、健康检查、日志等
2025-02-07 20:33:27 +08:00
package infra
import (
"time"
2025-02-07 20:33:27 +08:00
"github.com/gin-gonic/gin"
"google.golang.org/grpc/status"
)
2025-02-11 11:06:35 +08:00
var Response Reply
2025-02-07 20:33:27 +08:00
2025-10-03 19:55:20 +08:00
// Reply 统一响应结构体
2025-02-07 20:33:27 +08:00
type Reply struct {
2025-10-03 19:55:20 +08:00
Code int32 `json:"code"` // 响应码
Message string `json:"message"` // 响应消息
Details any `json:"details"` // 响应数据
Timeseq int64 `json:"timeseq"` // 时间戳序列
2025-02-07 20:33:27 +08:00
}
2025-10-03 19:55:20 +08:00
// Success 返回成功响应
// ctx: Gin上下文
// data: 响应数据
2025-02-07 20:33:27 +08:00
func (reply *Reply) Success(ctx *gin.Context, data any) {
2025-04-18 19:11:50 +08:00
reply.Code = 0
reply.Details = data
2025-04-18 19:11:50 +08:00
reply.Message = ""
reply.Timeseq = time.Now().UnixMilli()
2025-02-07 20:33:27 +08:00
if data == nil {
reply.Details = ""
2025-02-07 20:33:27 +08:00
}
ctx.JSON(200, reply)
}
2025-10-03 19:55:20 +08:00
// Error 返回错误响应
// ctx: Gin上下文
// err: 错误对象
2025-02-07 20:33:27 +08:00
func (reply *Reply) Error(ctx *gin.Context, err error) {
reply.Code = 500
reply.Details = ""
2025-10-03 19:55:20 +08:00
// 默认状态码为500
2025-02-07 20:33:27 +08:00
e, ok := status.FromError(err)
if ok {
2025-04-18 19:11:50 +08:00
reply.Code = int32(e.Code())
reply.Message = e.Message()
} else {
reply.Message = err.Error()
2025-02-07 20:33:27 +08:00
}
2025-10-03 19:55:20 +08:00
// 发送错误响应
2025-02-07 20:33:27 +08:00
ctx.JSON(200, reply)
}