package openplatform import ( "joybuywork/internal/consts" "joybuywork/internal/repository/cache" "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_open_platform" ) type Player struct { logic.Logic Req *pb.PlayerReq Res *pb.PlayerRes } func (s *Player) Run() error { return logic.Run(s) } func (s *Player) Exec() (err error) { cpn, err := s.campaign() if err != nil { return } return s.player(cpn) } func (s *Player) campaign() (cpn *model.FissionCampaign, err error) { project, err := finder.Project(s.Ctx, s.Req.GetProjectHashId()) 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 || project.ID != cpn.ProjectID { err = s.BE().VerifyError("not found campaign") return } s.Res.FissionId = cpn.FissionID if s.Req.GetStartTime() == 0 { s.Req.StartTime = cpn.StartTime } if s.Req.GetEndTime() == 0 { s.Req.EndTime = cpn.EndTime } return } func (s *Player) player(cpn *model.FissionCampaign) (err error) { user, err := cache.NewFissionUser(s.Ctx, cpn.ID).FindBySubUserId(s.Req.GetUserId()) if err != nil { err = s.BE().CacheError(err) return } if user == nil { s.Res.Status = 1 return } switch cpn.FissionID { case consts.IdKeep: var keep *players.KeepDog keep, err = players.NewKeepDog(s.Ctx, user) if err != nil { return } player := keep.GetPlayer() s.Res.Keep = &pb.PlayerRes_Keep{ LoveNum: int64(player.CollectNum), RemainFood: int64(player.Num), Action: nil, } return s._keepAction(player) default: return } } func (s *Player) _keepAction(player *model.FissionKeep) (err error) { m := s.GetDao().FissionKeepLog feedNum, err := m.WithContext(s.Ctx).Where( m.KeepID.Eq(player.ID), m.Type.Eq(mtype.FissionKeepLogTypeFeed), m.CreatedAt.Between(s.Req.GetStartTime(), s.Req.GetEndTime()), ).Count() if err != nil { err = s.BE().MysqlError(err) return } collectNum, err := m.WithContext(s.Ctx).Where( m.KeepID.Eq(player.ID), m.Type.Eq(mtype.FissionKeepLogTypeLove), m.CreatedAt.Between(s.Req.GetStartTime(), s.Req.GetEndTime()), ).Count() if err != nil { err = s.BE().MysqlError(err) return } keepM := s.GetDao().FissionKeep growPetNum, err := keepM.WithContext(s.Ctx).Where( keepM.UserID.Eq(player.UserID), keepM.CreatedAt.Between(s.Req.GetStartTime(), s.Req.GetEndTime()), ).Count() if err != nil { err = s.BE().MysqlError(err) return } s.Res.Keep.Action = &pb.PlayerRes_KeepAction{ FeedNum: feedNum, CollectNum: collectNum, GrowPet: growPetNum, } return }