voucher/internal/biz/syn_notice/syn_notice.go

63 lines
1.5 KiB
Go

package syn_notice
import (
"context"
"encoding/json"
)
var _ SynApiInterface = (*CmbToBBRequest)(nil)
var _ SynApiInterface = (*BBToWechatRequest)(nil)
var _ SynApiInterface = (*WechatToBBRequest)(nil)
type SynApiInterface interface {
GetSynNotice() *SynNotice
}
type SynNotice struct {
OutBizBo string
Type SynNoticeType
BizContent SynApiInterface
}
func (this *SynNotice) Marshal() ([]byte, error) {
return json.Marshal(this)
}
// 上下文键类型,避免命名冲突
type contextKey string
const (
contextCMBToBBKey contextKey = "cmb_to_bb"
contextBBToWXKey contextKey = "bb_to_wx"
)
// SynApi 无状态服务
type SynApi struct{}
// NewSynApi 创建无状态的处理实例
func NewSynApi() *SynApi {
return &SynApi{}
}
// WithCmbTOBB 将 request 存入上下文
func (w *SynApi) WithCmbTOBB(ctx context.Context) context.Context {
return context.WithValue(ctx, contextCMBToBBKey, &CmbToBBRequest{})
}
// GetCmbToBB 从上下文中获取 request
func (w *SynApi) GetCmbToBB(ctx context.Context) (*CmbToBBRequest, bool) {
req, ok := ctx.Value(contextCMBToBBKey).(*CmbToBBRequest)
return req, ok
}
// WithBBToWX 将 request 存入上下文
func (w *SynApi) WithBBToWX(ctx context.Context) context.Context {
return context.WithValue(ctx, contextBBToWXKey, &BBToWechatRequest{})
}
// GetBBToWX 从上下文中获取 request
func (w *SynApi) GetBBToWX(ctx context.Context) (*BBToWechatRequest, bool) {
req, ok := ctx.Value(contextBBToWXKey).(*BBToWechatRequest)
return req, ok
}