88 lines
1.7 KiB
Go
88 lines
1.7 KiB
Go
package response
|
|
|
|
import (
|
|
"base-go-v2/internal/logx"
|
|
"base-go-v2/internal/router"
|
|
"base-go-v2/internal/routinex"
|
|
"base-go-v2/internal/utils/strutil"
|
|
"net/http"
|
|
)
|
|
|
|
// Result 响应结构
|
|
type Result struct {
|
|
Code int `json:"code"`
|
|
Message string `json:"message"`
|
|
Data interface{} `json:"data,omitempty"`
|
|
TrackId string `json:"trackId,omitempty"`
|
|
}
|
|
|
|
// HttpCode 响应状态码
|
|
var HttpCode = struct {
|
|
Success int
|
|
Unauthorized int
|
|
Fail int
|
|
RefreshToken int
|
|
}{
|
|
Success: 200,
|
|
Unauthorized: 401,
|
|
Fail: 500,
|
|
RefreshToken: 402,
|
|
}
|
|
|
|
// Builder 响应构建器
|
|
type Builder struct {
|
|
c *router.Context
|
|
result Result
|
|
statusCode int // 可自定义 HTTP 状态码
|
|
}
|
|
|
|
// Success 构造成功响应
|
|
func Success(c *router.Context) *Builder {
|
|
return &Builder{
|
|
c: c,
|
|
result: Result{Code: HttpCode.Success, Message: "请求成功"},
|
|
statusCode: http.StatusOK,
|
|
}
|
|
}
|
|
|
|
// Fail 构造失败响应
|
|
func Fail(c *router.Context) *Builder {
|
|
return &Builder{
|
|
c: c,
|
|
result: Result{Code: HttpCode.Fail, Message: "请求失败"},
|
|
statusCode: http.StatusOK,
|
|
}
|
|
}
|
|
|
|
// Status 设置自定义 HTTP 状态码
|
|
func (b *Builder) Status(code int) *Builder {
|
|
b.statusCode = code
|
|
return b
|
|
}
|
|
|
|
func (b *Builder) Code(code int) *Builder {
|
|
b.result.Code = code
|
|
return b
|
|
}
|
|
|
|
func (b *Builder) Message(msg string) *Builder {
|
|
b.result.Message = msg
|
|
return b
|
|
}
|
|
|
|
func (b *Builder) Data(data interface{}) *Builder {
|
|
b.result.Data = data
|
|
return b
|
|
}
|
|
|
|
// Send 发送响应
|
|
func (b *Builder) Send() error {
|
|
if b.result.Data == nil {
|
|
b.result.Data = ""
|
|
}
|
|
if trackId := routinex.Get(logx.TrackID); trackId != nil {
|
|
b.result.TrackId = strutil.ToString(trackId)
|
|
}
|
|
return b.c.JSON(b.statusCode, b.result)
|
|
}
|