mirror of
https://github.com/FlourishingWorld/hk4e.git
synced 2026-03-01 00:35:36 +08:00
修改聊天数据存储结构
This commit is contained in:
@@ -10,13 +10,6 @@ import (
|
||||
"go.mongodb.org/mongo-driver/mongo"
|
||||
)
|
||||
|
||||
// PlayerDb 只从数据库读写的结构
|
||||
type PlayerDb struct {
|
||||
ID primitive.ObjectID `bson:"_id,omitempty"`
|
||||
PlayerID uint32 `bson:"PlayerID"` // 玩家uid
|
||||
ChatMsgMap map[uint32][]*model.ChatMsg // 聊天信息
|
||||
}
|
||||
|
||||
func (d *Dao) InsertPlayer(player *model.Player) error {
|
||||
db := d.db.Collection("player")
|
||||
_, err := db.InsertOne(context.TODO(), player)
|
||||
@@ -26,9 +19,9 @@ func (d *Dao) InsertPlayer(player *model.Player) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (d *Dao) InsertPlayerDb(playerDb *PlayerDb) error {
|
||||
db := d.db.Collection("player_db")
|
||||
_, err := db.InsertOne(context.TODO(), playerDb)
|
||||
func (d *Dao) InsertChatMsg(chatMsg *model.ChatMsg) error {
|
||||
db := d.db.Collection("chat_msg")
|
||||
_, err := db.InsertOne(context.TODO(), chatMsg)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -52,14 +45,14 @@ func (d *Dao) InsertPlayerList(playerList []*model.Player) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (d *Dao) InsertPlayerDbList(playerDbList []*PlayerDb) error {
|
||||
if len(playerDbList) == 0 {
|
||||
func (d *Dao) InsertChatMsgList(chatMsgList []*model.ChatMsg) error {
|
||||
if len(chatMsgList) == 0 {
|
||||
return nil
|
||||
}
|
||||
db := d.db.Collection("player_db")
|
||||
db := d.db.Collection("chat_msg")
|
||||
modelOperateList := make([]mongo.WriteModel, 0)
|
||||
for _, playerDb := range playerDbList {
|
||||
modelOperate := mongo.NewInsertOneModel().SetDocument(playerDb)
|
||||
for _, chatMsg := range chatMsgList {
|
||||
modelOperate := mongo.NewInsertOneModel().SetDocument(chatMsg)
|
||||
modelOperateList = append(modelOperateList, modelOperate)
|
||||
}
|
||||
_, err := db.BulkWrite(context.TODO(), modelOperateList)
|
||||
@@ -78,9 +71,9 @@ func (d *Dao) DeletePlayer(playerID uint32) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (d *Dao) DeletePlayerDb(playerID uint32) error {
|
||||
db := d.db.Collection("player_db")
|
||||
_, err := db.DeleteOne(context.TODO(), bson.D{{"PlayerID", playerID}})
|
||||
func (d *Dao) DeleteChatMsg(id primitive.ObjectID) error {
|
||||
db := d.db.Collection("chat_msg")
|
||||
_, err := db.DeleteOne(context.TODO(), bson.D{{"_id", id}})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -104,14 +97,14 @@ func (d *Dao) DeletePlayerList(playerIDList []uint32) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (d *Dao) DeletePlayerDbList(playerIDList []uint32) error {
|
||||
if len(playerIDList) == 0 {
|
||||
func (d *Dao) DeleteChatMsgList(idList []primitive.ObjectID) error {
|
||||
if len(idList) == 0 {
|
||||
return nil
|
||||
}
|
||||
db := d.db.Collection("player_db")
|
||||
db := d.db.Collection("chat_msg")
|
||||
modelOperateList := make([]mongo.WriteModel, 0)
|
||||
for _, playerID := range playerIDList {
|
||||
modelOperate := mongo.NewDeleteOneModel().SetFilter(bson.D{{"PlayerID", playerID}})
|
||||
for _, id := range idList {
|
||||
modelOperate := mongo.NewDeleteOneModel().SetFilter(bson.D{{"_id", id}})
|
||||
modelOperateList = append(modelOperateList, modelOperate)
|
||||
}
|
||||
_, err := db.BulkWrite(context.TODO(), modelOperateList)
|
||||
@@ -134,12 +127,12 @@ func (d *Dao) UpdatePlayer(player *model.Player) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (d *Dao) UpdatePlayerDb(playerDb *PlayerDb) error {
|
||||
db := d.db.Collection("player_db")
|
||||
func (d *Dao) UpdateChatMsg(chatMsg *model.ChatMsg) error {
|
||||
db := d.db.Collection("chat_msg")
|
||||
_, err := db.UpdateOne(
|
||||
context.TODO(),
|
||||
bson.D{{"PlayerID", playerDb.PlayerID}},
|
||||
bson.D{{"$set", playerDb}},
|
||||
bson.D{{"_id", chatMsg.ID}},
|
||||
bson.D{{"$set", chatMsg}},
|
||||
)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -164,14 +157,14 @@ func (d *Dao) UpdatePlayerList(playerList []*model.Player) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (d *Dao) UpdatePlayerDbList(playerDbList []*PlayerDb) error {
|
||||
if len(playerDbList) == 0 {
|
||||
func (d *Dao) UpdateChatMsgList(chatMsgList []*model.ChatMsg) error {
|
||||
if len(chatMsgList) == 0 {
|
||||
return nil
|
||||
}
|
||||
db := d.db.Collection("player_db")
|
||||
db := d.db.Collection("chat_msg")
|
||||
modelOperateList := make([]mongo.WriteModel, 0)
|
||||
for _, playerDb := range playerDbList {
|
||||
modelOperate := mongo.NewUpdateOneModel().SetFilter(bson.D{{"PlayerID", playerDb.PlayerID}}).SetUpdate(bson.D{{"$set", playerDb}})
|
||||
for _, chatMsg := range chatMsgList {
|
||||
modelOperate := mongo.NewUpdateOneModel().SetFilter(bson.D{{"_id", chatMsg.ID}}).SetUpdate(bson.D{{"$set", chatMsg}})
|
||||
modelOperateList = append(modelOperateList, modelOperate)
|
||||
}
|
||||
_, err := db.BulkWrite(context.TODO(), modelOperateList)
|
||||
@@ -195,24 +188,20 @@ func (d *Dao) QueryPlayerByID(playerID uint32) (*model.Player, error) {
|
||||
return player, nil
|
||||
}
|
||||
|
||||
func (d *Dao) QueryPlayerDbByID(playerID uint32) (*PlayerDb, error) {
|
||||
db := d.db.Collection("player_db")
|
||||
func (d *Dao) QueryChatMsgByID(id primitive.ObjectID) (*model.ChatMsg, error) {
|
||||
db := d.db.Collection("chat_msg")
|
||||
result := db.FindOne(
|
||||
context.TODO(),
|
||||
bson.D{{"PlayerID", playerID}},
|
||||
bson.D{{"_id", id}},
|
||||
)
|
||||
playerDb := new(PlayerDb)
|
||||
err := result.Decode(playerDb)
|
||||
chatMsg := new(model.ChatMsg)
|
||||
err := result.Decode(chatMsg)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if playerDb.ChatMsgMap == nil {
|
||||
playerDb.ChatMsgMap = make(map[uint32][]*model.ChatMsg)
|
||||
}
|
||||
return playerDb, nil
|
||||
return chatMsg, nil
|
||||
}
|
||||
|
||||
// QueryPlayerList 危险接口 非测试禁止使用
|
||||
func (d *Dao) QueryPlayerList() ([]*model.Player, error) {
|
||||
db := d.db.Collection("player")
|
||||
find, err := db.Find(
|
||||
@@ -233,3 +222,45 @@ func (d *Dao) QueryPlayerList() ([]*model.Player, error) {
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (d *Dao) QueryChatMsgList() ([]*model.ChatMsg, error) {
|
||||
db := d.db.Collection("chat_msg")
|
||||
find, err := db.Find(
|
||||
context.TODO(),
|
||||
bson.D{},
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result := make([]*model.ChatMsg, 0)
|
||||
for find.Next(context.TODO()) {
|
||||
item := new(model.ChatMsg)
|
||||
err = find.Decode(item)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result = append(result, item)
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (d *Dao) QueryChatMsgListByUid(uid uint32) ([]*model.ChatMsg, error) {
|
||||
db := d.db.Collection("chat_msg")
|
||||
find, err := db.Find(
|
||||
context.TODO(),
|
||||
bson.D{{"ToUid", uid}, {"Uid", uid}},
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result := make([]*model.ChatMsg, 0)
|
||||
for find.Next(context.TODO()) {
|
||||
item := new(model.ChatMsg)
|
||||
err = find.Decode(item)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result = append(result, item)
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user