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.
144 lines
2.9 KiB
Go
144 lines
2.9 KiB
Go
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
|
|
}
|