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 }