57 lines
1.5 KiB
Go
57 lines
1.5 KiB
Go
package response
|
|
|
|
import (
|
|
"context"
|
|
"github.com/zeromicro/go-zero/rest/httpx"
|
|
"net/http"
|
|
"tianyuan-api/pkg/errs"
|
|
)
|
|
|
|
// 定义通用的响应结构
|
|
type Response struct {
|
|
Code int `json:"code"`
|
|
Data interface{} `json:"data,omitempty"`
|
|
Message string `json:"message"`
|
|
}
|
|
type ResponseWithTransactionID struct {
|
|
Code int `json:"code"`
|
|
Data interface{} `json:"data,omitempty"`
|
|
Message string `json:"message"`
|
|
TransactionID string `json:"transaction_id"`
|
|
}
|
|
|
|
// 发送响应(公用函数)
|
|
func sendResponse(ctx context.Context, w http.ResponseWriter, code int, message string, data interface{}) {
|
|
// 从上下文中获取 TransactionID
|
|
transactionID, _ := ctx.Value("transactionID").(string)
|
|
if transactionID != "" {
|
|
result := ResponseWithTransactionID{
|
|
Code: code,
|
|
Data: data,
|
|
Message: message,
|
|
TransactionID: transactionID,
|
|
}
|
|
httpx.OkJsonCtx(ctx, w, result)
|
|
} else {
|
|
result := Response{
|
|
Code: code,
|
|
Data: data,
|
|
Message: message,
|
|
}
|
|
httpx.OkJsonCtx(ctx, w, result)
|
|
}
|
|
}
|
|
|
|
// 响应成功
|
|
func Success(ctx context.Context, w http.ResponseWriter, data interface{}) {
|
|
ctx = context.WithValue(ctx, "status", "success")
|
|
sendResponse(ctx, w, 0, "success", data)
|
|
}
|
|
|
|
// 响应失败
|
|
func Fail(ctx context.Context, w http.ResponseWriter, err *errs.AppError) {
|
|
ctx = context.WithValue(ctx, "status", "failed")
|
|
ctx = context.WithValue(ctx, "remark", err.Message)
|
|
sendResponse(ctx, w, err.Code, err.Message, nil)
|
|
}
|