| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- package db
- import (
- "errors"
- cherryApp "f1-game/internal/cherry_app"
- dbFacade "f1-game/internal/component/db/facade"
- nameDB "f1-game/internal/name/db"
- dbHero "f1-game/nodes/game/internal/db/data/hero"
- clog "github.com/cherry-game/cherry/logger"
- "go.mongodb.org/mongo-driver/v2/bson"
- "go.mongodb.org/mongo-driver/v2/mongo"
- )
- type (
- // HeroTable 英雄表
- HeroTable struct {
- PlayerID int64 `bson:"PlayerID,omitempty"`
- NodeID string `bson:"NodeID,omitempty"`
- dbHero.Data `bson:"Data,omitempty"`
- dbFacade.TableBase `bson:",inline"`
- }
- )
- func (p *HeroTable) TableName() string {
- return nameDB.Table_Hero
- }
- func (p *HeroTable) PrimaryValue() any {
- return p.PlayerID
- }
- func (p *HeroTable) CheckField() {
- if p.Heroes == nil {
- p.Heroes = make(dbHero.Heroes)
- }
- }
- func (p *HeroTable) Save2Queue() {
- save2Queue(p)
- }
- func GetHeroTable(playerID int64) *HeroTable {
- if val, ok := heroTableCache.GetIfPresent(playerID); ok {
- return val.(*HeroTable)
- }
- heroTable := GetHeroTableFromDB(playerID)
- heroTableCache.Put(playerID, heroTable)
- return heroTable
- }
- func GetHeroTableFromDB(playerID int64) *HeroTable {
- table := newHeroTable(playerID)
- filter := bson.M{
- nameDB.Field_NodeID: table.NodeID,
- nameDB.Field_PlayerID: table.PlayerID,
- }
- err := dbComponent.FindOne(table, filter)
- if err != nil {
- if errors.Is(err, mongo.ErrNoDocuments) {
- clog.Warnf("[playerID = %d] not found, create new one", playerID)
- return table
- }
- clog.Errorf("[playerID = %d] db error = %v", playerID, err)
- return table
- }
- table.CheckField()
- return table
- }
- func newHeroTable(playerID int64) *HeroTable {
- return &HeroTable{
- PlayerID: playerID,
- NodeID: cherryApp.NodeID(),
- Data: dbHero.NewData(),
- }
- }
- //func (p *HeroTable) TeamHeroIDList() []int32 {
- // ids := make([]int32, 0, len(p.Teams))
- // for _, heroID := range p.Teams {
- // ids = append(ids, heroID)
- // }
- //
- // return ids
- //}
- //func (p *HeroTable) TeamLevel() int32 {
- // level := int32(0)
- // for _, heroID := range p.Teams {
- // if hero, ok := p.Heroes.Get(heroID); ok {
- // level += hero.Level
- // }
- // }
- //
- // return level
- //}
|