You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

143 lines
3.5 KiB
Go

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