package campaignuser import ( "joybuywork/internal/consts" "joybuywork/internal/repository/finder" "joybuywork/internal/repository/model" "joybuywork/internal/repository/mtype" "joybuywork/internal/service/provider/players" "joybuywork/internal/utils/logic" pb "joybuywork/proto/go_proto/w_campaign_user" "joybuywork/proto/go_proto/workerr" "time" ) type Vote struct { logic.Logic Req *pb.VoteReq Res *pb.VoteRes } func (s *Vote) Run() error { return logic.Run(s) } func (s *Vote) Exec() (err error) { user, cpn, err := s.user() if err != nil { return } err = s.vote(user, cpn) if err != nil { return } return } // 用户信息 func (s *Vote) user() (user *model.FissionUser, cpn *model.FissionCampaign, err error) { cpn, err = finder.Campaign(s.Ctx, s.Req.GetCampaignId()) if err != nil { err = s.BE().CacheError(err) return } if cpn == nil || cpn.IsDel == mtype.Yes { err = workerr.NotFound("not found cpn") return } if cpn.EndTime < time.Now().Unix() { err = workerr.CEndError return } user, err = finder.FissionUser(s.Ctx, cpn.ID, s.Req.GetUserId()) if err != nil { err = s.BE().CacheError(err) return } if user == nil { err = workerr.NotFound("not found user") return } //如果活动没开始,还不是预览用户,不允许玩 if cpn.StartTime > time.Now().Unix() && user.IsView == mtype.No { err = workerr.CStartError return } return } func (s *Vote) vote(user *model.FissionUser, cpn *model.FissionCampaign) (err error) { switch cpn.FissionID { case consts.IdPrizeQuiz: //有奖竞猜 return s.prizeQuiz(user) case consts.IdVs: return s.vs(user) } return } func (s *Vote) vs(user *model.FissionUser) (err error) { vs, err := players.NewVs(s.Ctx, user) if err != nil { return } s.Res.Status, err = vs.Vote(s.Req.GetScheduleId(), s.Req.GetTeamId()) if err != nil { return } return } func (s *Vote) prizeQuiz(user *model.FissionUser) (err error) { quiz, err := players.NewQuiz(s.Ctx, user) if err != nil { return } err = quiz.Vote(s.Req.GetOptionId(), s.Req.GetVoteNum()) if err != nil { return } return }