package stonehenge import ( "go_dreamfactory/comm" "go_dreamfactory/lego/core" "go_dreamfactory/lego/sys/mgo" "go_dreamfactory/modules" "go_dreamfactory/pb" "go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/x/bsonx" ) // 图鉴 type ModelStonehengeBook struct { modules.MCompModel module *Stonehenge } //组件初始化接口 func (this *ModelStonehengeBook) Init(service core.IService, module core.IModule, comp core.IModuleComp, opt core.IModuleOptions) (err error) { this.TableName = comm.TableStonehengeBook this.MCompModel.Init(service, module, comp, opt) this.module = module.(*Stonehenge) //创建uid索引 this.DB.CreateIndex(core.SqlTable(this.TableName), mongo.IndexModel{ Keys: bsonx.Doc{{Key: "uid", Value: bsonx.Int32(1)}}, }) return } //获取图鉴 func (this *ModelStonehengeBook) getStonehengeBook(uid string) (info *pb.DBStonehengeBook, err error) { info = &pb.DBStonehengeBook{} if err = this.Get(uid, info); err != nil && mgo.MongodbNil != err { // 创建一条初始的数据 return } if mgo.MongodbNil == err { info = &pb.DBStonehengeBook{ Id: primitive.NewObjectID().Hex(), Uid: uid, Award: make(map[int32]*pb.DBStonehengeBookAward), } err = this.Add(uid, info) } return } func (this *ModelStonehengeBook) addStonehengeBook(uid string, btype int32, bid int32) { var ( info *pb.DBStonehengeBook bookAward *pb.DBStonehengeBookAward ok bool err error ) if info, err = this.module.modelStonehengeBook.getStonehengeBook(uid); err != nil { this.module.Errorln(err) return } if bookAward, ok = info.Award[btype]; !ok { bookAward = &pb.DBStonehengeBookAward{ Btype: btype, Books: make([]int32, 0), Stage: make(map[int32]bool), } info.Award[btype] = bookAward } bookAward.Books = append(bookAward.Books, btype) if err = this.Change(uid, map[string]interface{}{ "award": info.Award, }); err != nil { this.module.Errorln(err) return } }