63 lines
1.5 KiB
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
|
|
}
|