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