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.

303 lines
6.6 KiB
Go

package cmm
import (
"context"
"joybuywork/internal/repository/dao"
"joybuywork/internal/repository/dbcheck"
"joybuywork/internal/repository/model"
"joybuywork/internal/repository/mtype"
"joybuywork/internal/repository/withdefault"
"joybuywork/internal/utils/merr"
"github.com/golang-module/carbon/v2"
)
type FirstCreate struct {
ctx context.Context
be *merr.BusinessError
dao *dao.Query
}
func NewFirstCreate(ctx context.Context, dao *dao.Query) *FirstCreate {
return &FirstCreate{
ctx: ctx,
be: merr.NewBE(ctx),
dao: dao,
}
}
func (s *FirstCreate) FissionUserStat(user *model.FissionUser) (stat *model.FissionUserStat, err error) {
statM := s.dao.FissionUserStat
stat, err = statM.WithContext(s.ctx).Where(statM.UserID.Eq(user.ID)).Take()
if err = dbcheck.DbError(err); err != nil {
err = s.be.MysqlError(err)
return
}
if stat == nil {
stat = withdefault.FissionUserStat(&model.FissionUserStat{
UserID: user.ID,
CampaignID: user.CampaignID,
})
err = statM.WithContext(s.ctx).Create(stat)
if err != nil {
err = s.be.MysqlError(err)
return
}
}
return
}
func (s *FirstCreate) FissionDice(user *model.FissionUser) (player *model.FissionDice, err error) {
playerM := s.dao.FissionDice
player, err = playerM.WithContext(s.ctx).Where(playerM.UserID.Eq(user.ID)).Take()
if err = dbcheck.DbError(err); err != nil {
err = s.be.MysqlError(err)
return
}
if player != nil {
return
}
confM := s.dao.FissionCampaignDice
conf, err := confM.WithContext(s.ctx).Where(confM.CampaignID.Eq(user.CampaignID)).Take()
if err = dbcheck.DbError(err); err != nil {
err = s.be.MysqlError(err)
return
}
if conf == nil {
return
}
player = withdefault.FissionDice(&model.FissionDice{
UserID: user.ID,
CampaignID: user.CampaignID,
Chance: conf.InitChance,
})
err = playerM.WithContext(s.ctx).Create(player)
if err != nil {
err = s.be.MysqlError(err)
return
}
if conf.InitChance == 0 {
return
}
// 看看需不需要骰子记录
record := withdefault.FissionDiceRecord(&model.FissionDiceRecord{
CampaignID: user.CampaignID,
UserID: user.ID,
Mark: mtype.FissionDiceRecordMarkGetRollSys,
})
record.SetData(&mtype.DiceRecord{
Chance: conf.InitChance,
})
err = s.dao.FissionDiceRecord.WithContext(s.ctx).Create(record)
if err != nil {
err = s.be.MysqlError(err)
}
return
}
func (s *FirstCreate) FissionDiceProp(user *model.FissionUser, mark string) (prop *model.FissionDiceProp, err error) {
m := s.dao.FissionDiceProp
prop, err = m.WithContext(s.ctx).Where(m.UserID.Eq(user.ID), m.Mark.Eq(mark)).Take()
if err = dbcheck.DbError(err); err != nil {
err = s.be.MysqlError(err)
return
}
if prop == nil {
prop = withdefault.FissionDiceProp(&model.FissionDiceProp{
UserID: user.ID,
CampaignID: user.CampaignID,
Mark: mark,
Num: 0,
TotalNum: 0,
})
if err = m.WithContext(s.ctx).Create(prop); err != nil {
err = s.be.MysqlError(err)
return
}
}
return
}
func (s *FirstCreate) FissionGrow(user *model.FissionUser) (player *model.FissionGrow, err error) {
playerM := s.dao.FissionGrow
player, err = playerM.WithContext(s.ctx).Where(playerM.UserID.Eq(user.ID)).Take()
if err = dbcheck.DbError(err); err != nil {
err = s.be.MysqlError(err)
return
}
if player != nil {
return
}
confM := s.dao.FissionCampaignGrow
conf, err := confM.WithContext(s.ctx).Where(confM.CampaignID.Eq(user.CampaignID)).Take()
if err = dbcheck.DbError(err); err != nil {
err = s.be.MysqlError(err)
return
}
if conf == nil {
return
}
player = withdefault.FissionGrow(&model.FissionGrow{
UserID: user.ID,
CampaignID: user.CampaignID,
GrowNum: conf.InitNum,
PropsTime: carbon.Now().AddHours(int(conf.AutoHour)).Timestamp(),
})
err = playerM.WithContext(s.ctx).Create(player)
if err != nil {
err = s.be.MysqlError(err)
return
}
return
}
func (s *FirstCreate) FissionQa(user *model.FissionUser) (player *model.FissionQa, err error) {
playerM := s.dao.FissionQa
player, err = playerM.WithContext(s.ctx).Where(playerM.UserID.Eq(user.ID)).Take()
if err = dbcheck.DbError(err); err != nil {
err = s.be.MysqlError(err)
return
}
if player != nil {
return
}
confM := s.dao.FissionCampaignQa
conf, err := confM.WithContext(s.ctx).Where(confM.CampaignID.Eq(user.CampaignID)).Take()
if err = dbcheck.DbError(err); err != nil {
err = s.be.MysqlError(err)
return
}
if conf == nil {
return
}
player = withdefault.FissionQa(&model.FissionQa{
UserID: user.ID,
CampaignID: user.CampaignID,
Chance: conf.InitChance,
})
err = playerM.WithContext(s.ctx).Create(player)
if err != nil {
err = s.be.MysqlError(err)
return
}
return
}
func (s *FirstCreate) FissionBallot(user *model.FissionUser) (player *model.FissionBallot, err error) {
playerM := s.dao.FissionBallot
player, err = playerM.WithContext(s.ctx).Where(playerM.UserID.Eq(user.ID)).Take()
if err = dbcheck.DbError(err); err != nil {
err = s.be.MysqlError(err)
return
}
if player != nil {
return
}
confM := s.dao.FissionCampaignBallot
conf, err := confM.WithContext(s.ctx).Where(confM.CampaignID.Eq(user.CampaignID)).Take()
if err = dbcheck.DbError(err); err != nil {
err = s.be.MysqlError(err)
return
}
if conf == nil {
return
}
player = withdefault.FissionBallot(&model.FissionBallot{
UserID: user.ID,
CampaignID: user.CampaignID,
Chance: conf.InitChance,
})
err = playerM.WithContext(s.ctx).Create(player)
if err != nil {
err = s.be.MysqlError(err)
return
}
return
}
func (s *FirstCreate) FissionWin(user *model.FissionUser) (player *model.FissionWin, err error) {
playerM := s.dao.FissionWin
player, err = playerM.WithContext(s.ctx).Where(playerM.UserID.Eq(user.ID)).Take()
if err = dbcheck.DbError(err); err != nil {
err = s.be.MysqlError(err)
return
}
if player != nil {
return
}
player = withdefault.FissionWin(&model.FissionWin{
UserID: user.ID,
CampaignID: user.CampaignID,
NextStep: 1,
})
err = playerM.WithContext(s.ctx).Create(player)
if err != nil {
err = s.be.MysqlError(err)
return
}
return
}
func (s *FirstCreate) FissionReferral(user *model.FissionUser) (player *model.FissionReferral, err error) {
playerM := s.dao.FissionReferral
player, err = playerM.WithContext(s.ctx).Where(playerM.UserID.Eq(user.ID)).Take()
if err = dbcheck.DbError(err); err != nil {
err = s.be.MysqlError(err)
return
}
if player != nil {
return
}
player = withdefault.FissionReferral(&model.FissionReferral{
UserID: user.ID,
CampaignID: user.CampaignID,
NextStep: 1,
})
err = playerM.WithContext(s.ctx).Create(player)
if err != nil {
err = s.be.MysqlError(err)
return
}
return
}