tianyuan-api-server/pkg/response/response.go

59 lines
1.6 KiB
Go
Raw Normal View History

2024-10-02 00:57:17 +08:00
package response
import (
2024-10-04 23:07:49 +08:00
"context"
2024-10-02 00:57:17 +08:00
"github.com/zeromicro/go-zero/rest/httpx"
"net/http"
2024-10-12 20:41:55 +08:00
"tianyuan-api/pkg/errs"
2024-10-02 00:57:17 +08:00
)
// 定义通用的响应结构
type Response struct {
Code int `json:"code"`
Data interface{} `json:"data,omitempty"`
Message string `json:"message"`
}
2024-10-04 23:07:49 +08:00
type ResponseWithTransactionID struct {
2024-10-12 20:41:55 +08:00
Code int `json:"code"`
Data interface{} `json:"data,omitempty"`
Message string `json:"message"`
TransactionID string `json:"transaction_id"`
2024-10-02 00:57:17 +08:00
}
2024-10-12 20:41:55 +08:00
// 发送响应(公用函数)
func sendResponse(ctx context.Context, w http.ResponseWriter, code int, message string, data interface{}) {
2024-10-04 23:07:49 +08:00
// 从上下文中获取 TransactionID
2024-10-12 20:41:55 +08:00
transactionID, _ := ctx.Value("transactionID").(string)
if transactionID != "" {
2024-10-04 23:07:49 +08:00
result := ResponseWithTransactionID{
2024-10-12 20:41:55 +08:00
Code: code,
Data: data,
Message: message,
TransactionID: transactionID,
2024-10-04 23:07:49 +08:00
}
2024-10-12 20:41:55 +08:00
httpx.OkJsonCtx(ctx, w, result)
2024-10-04 23:07:49 +08:00
} else {
result := Response{
2024-10-12 20:41:55 +08:00
Code: code,
2024-10-04 23:07:49 +08:00
Data: data,
2024-10-12 20:41:55 +08:00
Message: message,
2024-10-04 23:07:49 +08:00
}
2024-10-12 20:41:55 +08:00
httpx.OkJsonCtx(ctx, w, result)
2024-10-02 00:57:17 +08:00
}
}
2024-10-12 20:41:55 +08:00
// 响应成功
func Success(ctx context.Context, w http.ResponseWriter, data interface{}) {
ctx = context.WithValue(ctx, "status", "success")
2024-10-12 23:49:59 +08:00
ctx = context.WithValue(ctx, "Charges", true)
2024-10-12 20:41:55 +08:00
sendResponse(ctx, w, 0, "success", data)
}
2024-10-02 00:57:17 +08:00
// 响应失败
2024-10-12 20:41:55 +08:00
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)
2024-10-02 00:57:17 +08:00
}