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