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