package blink import ( "joybuywork/internal/config" "joybuywork/internal/consts" "fmt" ) type CampaignLink struct { link cwMark string //站外渠道标识 subUserId string //第三方用户id lang string //语言标识 lv string //用户等级标识 scene int8 //项目应用场景类型 dyLinkId string //动态下载页链接id ctLinkId string //链接内容id isView bool //是否预览用户 userId string //活动用户id center } type center struct { centerId string // 任务中心id moduleId string // 模块id } func NewCampaignLink(domain, hashId, cmark string, opts ...CpnLinkOption) CampaignLink { switch config.Config.Server.Env { case consts.Dev, consts.Local: domain = "dev" case consts.Test: domain = "test" } l := CampaignLink{ link: link{ host: fmt.Sprintf("%s%s%s", config.Config.Server.LinkDomainProto, domain, config.Config.Server.LinkDomain), hashId: hashId, cmark: cmark, }, } for _, opt := range opts { opt(&l) } return l } // AddOption 追加参数 func (l CampaignLink) AddOption(opts ...CpnLinkOption) CampaignLink { for _, opt := range opts { opt(&l) } return l } // CampaignCodeLink 口令链接 func (l CampaignLink) CampaignCodeLink() string { return l.params(fmt.Sprintf("%s/%s", l.host, route)) } // CampaignShareLink 活动链接 func (l CampaignLink) CampaignShareLink() string { return l.params(fmt.Sprintf("%s/%s", l.host, route)) } // CampaignDownloadLink 活动下载链接 func (l CampaignLink) CampaignDownloadLink() string { return l.params(fmt.Sprintf("%s/%s/%s", l.host, route, downloadRoute)) } // CampaignWebLink 站外活动链接 func (l CampaignLink) CampaignWebLink() string { return l.params(fmt.Sprintf("%s/%s/%s", l.host, route, webRoute)) } // CampaignWebShareLink WebToWeb分享链接 func (l CampaignLink) CampaignWebShareLink() string { return l.params(fmt.Sprintf("%s/%s/%s", l.host, route, downloadRoute)) } // CampaignDynamicLink 活动动态下载页地址 func (l CampaignLink) CampaignDynamicLink() string { return l.params(fmt.Sprintf("%s/%s/%s", l.host, route, downloadRoute)) } // CampaignContentLink 活动下载页内容链接 func (l CampaignLink) CampaignContentLink() string { return l.params(fmt.Sprintf("%s/%s/%s", l.host, route, downloadRoute)) } // 参数 func (l CampaignLink) params(link string) (url string) { url = fmt.Sprintf( "%s?%s=%s&%s=%s", link, campaignHashIdKey, l.hashId, campaignCmarkKey, l.cmark, ) url = queryAddStr(url, campaignCmarkWithWebKey, l.cwMark) url = queryAddStr(url, subUserIdParamKey, l.subUserId) url = queryAddStr(url, campaignDynamicKey, l.dyLinkId) url = queryAddStr(url, campaignContentLinkKey, l.ctLinkId) url = queryAddStr(url, langParamKey, l.lang) url = queryAddStr(url, levelParamKey, l.lv) url = queryAddStr(url, campaignUserIdKey, l.userId) url = queryAddStr(url, centerHashIdKey, l.centerId) url = queryAddStr(url, centerModuleIdKey, l.moduleId) url = queryAddInt(url, projectSceneKey, l.scene) url = queryAddBool(url, viewerParamKey, l.isView) return } func queryAddStr(link, key string, value string) string { if value == "" { return link } return fmt.Sprintf("%s&%s=%s", link, key, value) } func queryAddInt[T consts.IntType](link, key string, value T) string { if value == 0 { return link } return fmt.Sprintf("%s&%s=%v", link, key, value) } func queryAddBool(link, key string, value bool) string { if !value { return link } return fmt.Sprintf("%s&%s=true", link, key) }