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.
115 lines
2.1 KiB
Go
115 lines
2.1 KiB
Go
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
|
|
}
|