tianyuan-api-server/pkg/response/response.go
2024-10-12 20:41:55 +08:00

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)
}