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.

126 lines
2.6 KiB
Go

package openplatform
import (
"joybuywork/internal/config"
"joybuywork/internal/repository/cache"
"joybuywork/internal/repository/finder"
"joybuywork/internal/repository/model"
"joybuywork/internal/repository/mtype"
"joybuywork/internal/service/cmm"
"joybuywork/internal/utils/blink"
"joybuywork/internal/utils/logic"
pb "joybuywork/proto/go_proto/w_open_platform"
"fmt"
)
type CampaignInfo struct {
logic.Logic
Req *pb.CampaignInfoReq
Res *pb.CampaignInfoRes
}
func (s *CampaignInfo) Run() error {
return logic.Run(s)
}
func (s *CampaignInfo) Exec() (err error) {
project, cpn, err := s.campaign()
if err != nil {
return
}
err = s.info(project, cpn)
if err != nil {
return
}
if len(cpn.GetLangMarks()) <= 1 {
return
}
return s.langs(cpn)
}
func (s *CampaignInfo) campaign() (project *model.Project, cpn *model.FissionCampaign, err error) {
project, err = finder.Project(s.Ctx, s.Req.GetProjectId())
if err != nil {
err = s.BE().CacheError(err)
return
}
if project == nil {
err = s.BE().VerifyError("not found project")
return
}
cpn, err = finder.Campaign(s.Ctx, s.Req.GetCampaignHashId())
if err != nil {
err = s.BE().CacheError(err)
return
}
if cpn == nil {
err = s.BE().VerifyError("not found campaign")
return
}
return
}
func (s *CampaignInfo) info(project *model.Project, cpn *model.FissionCampaign) (err error) {
s.Res.HashId = cpn.HashID
s.Res.Title = cpn.Title
// 默认渠道
cl, err := cmm.NewCMM(s.Ctx, s.GetDao()).UserBindChannel(cpn.ID, "")
if err != nil {
return
}
var clMark string
if cl != nil {
clMark = cl.Mark
}
s.Res.Link = blink.NewCampaignLink(project.Domain, cpn.HashID, clMark).CampaignShareLink()
s.Res.Langs = make([]*pb.CampaignInfoRes_Lang, 0, len(cpn.GetLangMarks()))
style, err := cache.NewCampaignStyle(s.Ctx).FindByCampaignId(cpn.ID)
if err != nil {
err = s.BE().CacheError(err)
return
}
s.Res.Langs = append(s.Res.Langs, &pb.CampaignInfoRes_Lang{
Mark: cpn.GetLangMarks()[0],
PageTitle: style.PageTitle,
ShareText: style.ShareText,
ShareImg: fmt.Sprintf("%s/%s", config.Config.Upload.Host, style.ShareImg),
})
return
}
func (s *CampaignInfo) langs(cpn *model.FissionCampaign) (err error) {
m := s.GetDao().FissionCampaignLang
list, err := m.WithContext(s.Ctx).Where(m.CampaignID.Eq(cpn.ID), m.IsDel.Eq(mtype.No)).Find()
if err != nil {
err = s.BE().MysqlError(err)
return
}
for _, v := range list {
s.Res.Langs = append(s.Res.Langs, &pb.CampaignInfoRes_Lang{
Mark: v.LangMark,
PageTitle: v.PageTitle,
ShareText: v.ShareText,
ShareImg: fmt.Sprintf("%s/%s", config.Config.Upload.Host, v.ShareImg),
})
}
return
}