Files
gin/define/response.go
2025-10-13 22:01:31 +08:00

157 lines
5.4 KiB
Go

// Package define ...
//
// Description : define ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 2022-06-25 20:33
package define
import (
"sync"
"git.zhangdeman.cn/zhangdeman/consts"
"git.zhangdeman.cn/zhangdeman/wrapper/op_ternary"
)
var (
inputHttpHandleConfig = &HttpHandleConfig{}
)
// HttpHandleConfig 请求处理配置
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 20:41 2022/6/25
type HttpHandleConfig struct {
RecordRequestDataField string
RecordResponseDataField string
RequestIDField string
TraceIDField string
ResponseCodeField string
ResponseMessageField string
HandleRequestCostField string
ResponseDataField string
ResponseTraceIDField string
StartRequestTimeField string
FinishRequestTimeField string
RequestIsSuccessField string // 请求处理是否成功的标识
ExtensionOutputField string // 扩展信息对外输出字段
EnableExtensionOutput bool
DisableDebugStackOutput bool // 禁用异常堆栈打印
}
// ConvertDefaultConfig 覆盖默认配置
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 20:41 2022/6/25
func ConvertDefaultConfig(cfg *HttpHandleConfig) {
inputHttpHandleConfig = cfg
}
// GetHttpHandleConfig 获取http配置
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 16:55 2024/7/23
func GetHttpHandleConfig() *HttpHandleConfig {
return &HttpHandleConfig{
EnableExtensionOutput: inputHttpHandleConfig.EnableExtensionOutput,
DisableDebugStackOutput: inputHttpHandleConfig.DisableDebugStackOutput,
RequestIDField: op_ternary.BaseType[string](
nil == inputHttpHandleConfig || inputHttpHandleConfig.RequestIDField == "",
consts.GinRequestIDField,
inputHttpHandleConfig.RequestIDField,
),
TraceIDField: op_ternary.BaseType[string](
nil == inputHttpHandleConfig || inputHttpHandleConfig.TraceIDField == "",
consts.GinTraceIDField,
inputHttpHandleConfig.TraceIDField,
),
ResponseCodeField: op_ternary.BaseType[string](
nil == inputHttpHandleConfig || inputHttpHandleConfig.ResponseCodeField == "",
consts.GinResponseCodeField,
inputHttpHandleConfig.ResponseCodeField,
),
ResponseMessageField: op_ternary.BaseType[string](
nil == inputHttpHandleConfig || inputHttpHandleConfig.ResponseMessageField == "",
consts.GinResponseMessageField,
inputHttpHandleConfig.ResponseMessageField,
),
HandleRequestCostField: op_ternary.BaseType[string](
nil == inputHttpHandleConfig || inputHttpHandleConfig.HandleRequestCostField == "",
consts.GinHandleRequestCostField,
inputHttpHandleConfig.HandleRequestCostField,
),
ResponseDataField: op_ternary.BaseType[string](
nil == inputHttpHandleConfig || inputHttpHandleConfig.ResponseDataField == "",
consts.GinResponseDataField,
inputHttpHandleConfig.ResponseDataField,
),
ResponseTraceIDField: op_ternary.BaseType[string](
nil == inputHttpHandleConfig || inputHttpHandleConfig.ResponseTraceIDField == "",
consts.GinResponseTraceIDField,
inputHttpHandleConfig.ResponseTraceIDField,
),
StartRequestTimeField: op_ternary.BaseType[string](
nil == inputHttpHandleConfig || inputHttpHandleConfig.StartRequestTimeField == "",
consts.GinStartRequestTimeField,
inputHttpHandleConfig.StartRequestTimeField,
),
FinishRequestTimeField: op_ternary.BaseType[string](
nil == inputHttpHandleConfig || inputHttpHandleConfig.FinishRequestTimeField == "",
consts.GinFinishRequestTimeField,
inputHttpHandleConfig.FinishRequestTimeField,
),
RecordRequestDataField: op_ternary.BaseType[string](
nil == inputHttpHandleConfig || inputHttpHandleConfig.RecordRequestDataField == "",
consts.GinRecordRequestDataField,
inputHttpHandleConfig.RecordRequestDataField,
),
RecordResponseDataField: op_ternary.BaseType[string](
nil == inputHttpHandleConfig || inputHttpHandleConfig.RecordResponseDataField == "",
consts.GinRecordResponseDataField,
inputHttpHandleConfig.RecordResponseDataField,
),
RequestIsSuccessField: op_ternary.BaseType[string](
nil == inputHttpHandleConfig || inputHttpHandleConfig.RequestIsSuccessField == "",
consts.GinRequestIsSuccessField,
inputHttpHandleConfig.RecordResponseDataField,
),
ExtensionOutputField: op_ternary.BaseType[string](
nil == inputHttpHandleConfig || inputHttpHandleConfig.ExtensionOutputField == "",
consts.GinResponseExtensionField,
inputHttpHandleConfig.RecordResponseDataField,
),
}
}
const (
LogicAfterResponseKey = "__logic_after_response__"
)
type LogicAfterResponse struct {
SuccessHookFuncList []func() `json:"-"` // 请求最后需要执行的成功hook函数
FailureHookFuncList []func() `json:"-"` // 请求最后需要执行的失败hook函数
Lock *sync.RWMutex `json:"-"` // 逻辑锁
}
func (logic *LogicAfterResponse) AddSuccessHook(f func()) {
logic.Lock.Lock()
defer logic.Lock.Unlock()
logic.SuccessHookFuncList = append(logic.SuccessHookFuncList, f)
}
func (logic *LogicAfterResponse) AddFailureHook(f func()) {
logic.Lock.Lock()
defer logic.Lock.Unlock()
logic.FailureHookFuncList = append(logic.FailureHookFuncList, f)
}
// ResponseOption 响应的可用选项
type ResponseOption struct {
ContentType string `json:"content_type"` // 响应的contentType
Extension map[string]any `json:"extension"` // 扩展数据
XmlName string `json:"xml_name"` // 以xml文件格式响应数据时, Xml文件名(根节点)
}