package svc import ( "errors" "net/rpc" "github.com/globalsign/mgo" "github.com/globalsign/mgo/bson" "mongo.games.com/game/dbproxy/mongo" "mongo.games.com/game/model" ) var ( PlayerGameDataDBName = "user" PlayerGameDataCollName = "user_gamedata" PlayerGameDataColError = errors.New("PlayerGameData collection open failed") PlayerGameDataSvcSingle = &PlayerGameDataSvc{} ) func PlayerGameDataCollection(plt string) *mongo.Collection { s := mongo.MgoSessionMgrSington.GetPltMgoSession(plt, PlayerGameDataDBName) if s != nil { c, first := s.DB().C(PlayerGameDataCollName) if first { c.EnsureIndex(mgo.Index{Key: []string{"snid", "id"}, Unique: true, Background: true, Sparse: true}) c.EnsureIndex(mgo.Index{Key: []string{"id"}, Background: true, Sparse: true}) } return c } return nil } func init() { rpc.Register(PlayerGameDataSvcSingle) } type PlayerGameDataSvc struct{} func (p *PlayerGameDataSvc) Save(req *model.PlayerGameSaveReq, b *bool) error { c := PlayerGameDataCollection(req.Platform) if c == nil { return PlayerGameDataColError } for _, v := range req.Data { _, err := c.Upsert(bson.M{"snid": v.SnId, "id": v.Id}, v) if err != nil { return err } } *b = true return nil } func (p *PlayerGameDataSvc) Find(req *model.PlayerGameDataFindReq, res *model.PlayerGameDataFindRes) error { c := PlayerGameDataCollection(req.Platform) if c == nil { return PlayerGameDataColError } var ret []*model.PlayerGameData err := c.Find(bson.M{"snid": req.SnId}).All(&ret) if err != nil { return err } res.Data = ret return nil }