go_dreamfactory/modules/oldtimes/model_oldtimes.go
2023-04-28 16:51:45 +08:00

142 lines
3.1 KiB
Go

package oldtimes
import (
"go_dreamfactory/comm"
"go_dreamfactory/lego/core"
"go_dreamfactory/lego/sys/log"
"go_dreamfactory/modules"
"go_dreamfactory/pb"
"sort"
"go.mongodb.org/mongo-driver/mongo"
)
type ModelOldtimes struct {
modules.MCompModel
moduleOldtimes *Oldtimes
service core.IService
}
type status int32
const (
lock status = 0 //未解锁
unlock status = 1 //已解锁
ongoing status = 2 //进行中
finish status = 3 //完成
)
func (this *ModelOldtimes) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) {
err = this.MCompModel.Init(service, module, comp, options)
this.TableName = comm.TableOldtimes
this.moduleOldtimes = module.(*Oldtimes)
this.service = service
return
}
func (this *ModelOldtimes) firstChapter() int32 {
gltl, err := this.moduleOldtimes.configure.getTimelineCfg()
if err != nil {
return 0
}
list := gltl.GetDataList()
if len(list) == 0 {
return 0
}
sort.SliceStable(list, func(i int, j int) bool {
return list[i].Order < list[j].Order
})
return list[0].Group
}
func (this *ModelOldtimes) firstLevel(groupId int32) int32 {
glmt, err := this.moduleOldtimes.configure.getMaintaskCfg()
if err != nil {
return 0
}
for _, l := range glmt.GetDataList() {
if l.Group == groupId && l.SubTask == 0 {
return l.Id
}
}
return 0
}
func (this *ModelOldtimes) getDBOldtimes(uid string) *pb.DBOldtimes {
ot := &pb.DBOldtimes{}
if err := this.Get(uid, ot); err != nil {
if err == mongo.ErrNoDocuments {
ot.Uid = uid
//默认启动第一章第一关卡
groupId := this.firstChapter()
levelId := this.firstLevel(groupId)
if groupId == 0 || levelId == 0 {
this.moduleOldtimes.Error("init oldtimes id err",
log.Field{Key: "uid", Value: uid},
log.Field{Key: "err", Value: err})
return nil
}
chapter := &pb.Chapter{
Cid: groupId,
Status: int32(unlock), //解锁
}
chapter.Levels = append(chapter.Levels, &pb.Level{
Lid: levelId,
Status: int32(unlock),
})
ot.Chapters = append(ot.Chapters, chapter)
if err := this.Add(uid, ot); err != nil {
this.moduleOldtimes.Error("add oldtimes err",
log.Field{Key: "uid", Value: uid},
log.Field{Key: "err", Value: err})
return nil
}
}
}
return ot
}
func (this *ModelOldtimes) getChatper(chapterId int32, data *pb.DBOldtimes) *pb.Chapter {
for _, d := range data.Chapters {
if d.Cid == chapterId {
return d
}
}
return nil
}
func (this *ModelOldtimes) getLevel(levelId int32, chapter *pb.Chapter) *pb.Level {
if chapter == nil {
return nil
}
for _, d := range chapter.Levels {
if d.Lid == levelId {
return d
}
}
return nil
}
func (this *ModelOldtimes) isExist(levelId int32, ot *pb.DBOldtimes) bool {
for _, chapter := range ot.Chapters {
for _, level := range chapter.Levels {
if level.Lid == levelId {
return true
}
}
}
return false
}
// 更新旧时光
func (this *ModelOldtimes) updateOldtimes(uid string, ot *pb.DBOldtimes) error {
update := map[string]interface{}{
"chapters": ot.Chapters,
}
return this.Change(uid, update)
}