package response import ( "encoding/json" "git.sxidc.com/go-framework/baize/framework/core/api" "git.sxidc.com/go-framework/baize/framework/core/infrastructure/logger" "github.com/pkg/errors" ) // SendResponseFunc 发送响应函数 type SendResponseFunc[O any] func(c *api.Context, statusCode int, data O, err error) // NoResponse 零值占位响应函数 func NoResponse(_ *api.Context, _ int, _ any, _ error) { return } // SendMsgResponse 发送MsgResponse的响应函数 // 参数: // - c: 上下文 // - statusCode: HTTP状态码 // - data: 无效 // - err: 错误 // 返回值: 无 func SendMsgResponse(c *api.Context, statusCode int, _ any, err error) { msgResp := formMsgResponse(err) c.JSON(statusCode, msgResp) } // IDResponse 响应ID的响应结构 type IDResponse struct { MsgResponse ID string `json:"id"` } // SendIDResponse 发送ID响应的函数 // 参数: // - c: 上下文 // - statusCode: HTTP状态码 // - id: 发送的id // - err: 错误 // 返回值: 无 func SendIDResponse(c *api.Context, statusCode int, id string, err error) { msgResp := formMsgResponse(err) c.JSON(statusCode, IDResponse{ MsgResponse: msgResp, ID: id, }) } // InfoResponse 响应Info的响应结构 type InfoResponse[T any] struct { MsgResponse Info T `json:"info"` } // SendInfoResponse 发送Info响应的函数 // 参数: // - c: 上下文 // - statusCode: HTTP状态码 // - info: 发送的Info // - err: 错误 // 返回值: 无 func SendInfoResponse[T any](c *api.Context, statusCode int, info T, err error) { msgResp := formMsgResponse(err) c.JSON(statusCode, InfoResponse[T]{ MsgResponse: msgResp, Info: info, }) } // InfosResponse 响应Infos的响应结构 type InfosResponse[T any] struct { MsgResponse InfosData[T] } // InfosData Infos响应的数据结构 // 类型参数: // - T: Info结构类型 type InfosData[T any] struct { Infos []T `json:"infos"` TotalCount int64 `json:"totalCount"` PageNo int `json:"pageNo"` } // SendInfosResponse 发送Infos响应的函数 // 参数: // - c: 上下文 // - statusCode: HTTP状态码 // - data: InfosData[T]结构,T是包含的Info类型 // - err: 错误 // 返回值: 无 func SendInfosResponse[T any](c *api.Context, statusCode int, data InfosData[T], err error) { msgResp := formMsgResponse(err) c.JSON(statusCode, InfosResponse[T]{ MsgResponse: msgResp, InfosData: data, }) } // StructToMap 将结构转换为map的函数(用于作为map响应函数的发送数据) // 参数: // - originStruct: 原始结构 // 返回值: // - 转换为的map func StructToMap(originStruct any) map[string]any { jsonBytes, err := json.Marshal(originStruct) if err != nil { panic(err) } retMap := make(map[string]any) err = json.Unmarshal(jsonBytes, &retMap) if err != nil { panic(err) } return retMap } // SendMapResponse 发送map响应的函数(实际响应的是Json) // 参数: // - c: 上下文 // - statusCode: HTTP状态码 // - data: map响应数据 // - err: 错误 // 返回值: 无 func SendMapResponse(c *api.Context, statusCode int, data map[string]any, err error) { msgRespMap := formMapMsgResponse(err) for key, value := range data { msgRespMap[key] = value } c.JSON(statusCode, msgRespMap) } // SendString 发送字符串响应的函数 // 参数: // - c: 上下文 // - statusCode: HTTP状态码 // - data: 字符串响应数据 // - err: 错误 // 返回值: 无 func SendString(c *api.Context, statusCode int, data string, err error) { if err != nil { c.String(statusCode, err.Error()) return } c.String(statusCode, data) } // WriteBytes 发送字节响应的函数 // 参数: // - c: 上下文 // - statusCode: HTTP状态码 // - data: 字节响应数据 // - err: 错误 // 返回值: 无 func WriteBytes(c *api.Context, statusCode int, bytes []byte, err error) { if err != nil { c.AbortWithStatus(statusCode) return } _, err = c.Writer.Write(bytes) if err != nil { logger.GetInstance().Error(errors.New(err.Error())) c.AbortWithStatus(statusCode) return } c.Writer.Flush() } // WXOrderResponse 微信订单响应结构 type WXOrderResponse struct { ReturnCode string `xml:"return_code"` ReturnMsg string `xml:"return_msg"` } // SendWXOrderResponse 微信订单响应函数 // 参数: // - c: 上下文 // - statusCode: HTTP状态码 // - data: 无效 // - err: 错误 // 返回值: 无 func SendWXOrderResponse(c *api.Context, statusCode int, _ any, err error) { if err != nil { c.XML(statusCode, &WXOrderResponse{ ReturnCode: "FAIL", ReturnMsg: err.Error(), }) return } c.XML(statusCode, &WXOrderResponse{ ReturnCode: "SUCCESS", }) } // MsgResponse 响应头 type MsgResponse struct { Success bool `json:"success"` ErrCode int `json:"errCode"` Msg string `json:"msg"` } func formMsgResponse(err error) MsgResponse { if err != nil { logger.GetInstance().Error(err) return MsgResponse{ Success: false, ErrCode: 1, Msg: err.Error(), } } return MsgResponse{ Success: true, ErrCode: 0, Msg: "操作成功", } } func formMapMsgResponse(err error) map[string]any { resp := make(map[string]any) if err != nil { logger.GetInstance().Error(err) resp["success"] = false resp["errCode"] = 1 resp["msg"] = err.Error() return resp } resp["success"] = true resp["errCode"] = 0 resp["msg"] = "操作成功" return resp }