diff --git a/cmd/open_im_api/main.go b/cmd/open_im_api/main.go index 17400d1cd..cb3fcd9ae 100644 --- a/cmd/open_im_api/main.go +++ b/cmd/open_im_api/main.go @@ -92,8 +92,8 @@ func main() { } superGroupRouterGroup := r.Group("/super_group") { - superGroupRouterGroup.POST("/get_joined_super_group_list", group.GetJoinedSuperGroupList) - superGroupRouterGroup.POST("/get_super_groups_info", group.GetSuperGroupsInfo) + superGroupRouterGroup.POST("/get_joined_group_list", group.GetJoinedSuperGroupList) + superGroupRouterGroup.POST("/get_groups_info", group.GetSuperGroupsInfo) } //certificate authRouterGroup := r.Group("/auth") diff --git a/internal/api/group/super_group.go b/internal/api/group/super_group.go index 35fd88f7a..c3b177dae 100644 --- a/internal/api/group/super_group.go +++ b/internal/api/group/super_group.go @@ -23,7 +23,14 @@ func GetJoinedSuperGroupList(c *gin.Context) { return } log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req) - reqPb := rpc.GetJoinedSuperGroupListReq{OperationID: req.OperationID} + ok, opUserID, errInfo := token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID) + if !ok { + errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } + reqPb := rpc.GetJoinedSuperGroupListReq{OperationID: req.OperationID, OpUserID: opUserID, UserID: req.FromUserID} etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) client := rpc.NewGroupClient(etcdConn) rpcResp, err := client.GetJoinedSuperGroupList(context.Background(), &reqPb) diff --git a/pkg/common/db/mongoModel.go b/pkg/common/db/mongoModel.go index 0a3ef7994..367502d11 100644 --- a/pkg/common/db/mongoModel.go +++ b/pkg/common/db/mongoModel.go @@ -986,10 +986,12 @@ func (d *DataBases) CreateSuperGroup(groupID string, initMemberIDList []string, Upsert: &upsert, } c = d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cUserToSuperGroup) - _, err = c.UpdateMany(sCtx, bson.M{"user_id": bson.M{"$in": initMemberIDList}}, bson.M{"$addToSet": bson.M{"group_id_list": groupID}}, opts) - if err != nil { - session.AbortTransaction(ctx) - return utils.Wrap(err, "transaction failed") + for _, userID := range initMemberIDList { + _, err = c.UpdateOne(sCtx, bson.M{"user_id": userID}, bson.M{"$addToSet": bson.M{"group_id_list": groupID}, "user_id": userID}, opts) + if err != nil { + session.AbortTransaction(ctx) + return utils.Wrap(err, "transaction failed") + } } session.CommitTransaction(ctx) return err @@ -1031,10 +1033,12 @@ func (d *DataBases) AddUserToSuperGroup(groupID string, userIDList []string) err opts := &options.UpdateOptions{ Upsert: &upsert, } - _, err = c.UpdateMany(sCtx, bson.M{"user_id": bson.M{"$in": userIDList}}, bson.M{"$addToSet": bson.M{"group_id_list": groupID}}, opts) - if err != nil { - session.AbortTransaction(ctx) - return utils.Wrap(err, "transaction failed") + for _, userID := range userIDList { + _, err = c.UpdateOne(sCtx, bson.M{"user_id": userID}, bson.M{"$addToSet": bson.M{"group_id_list": groupID}, "user_id": userID}, opts) + if err != nil { + session.AbortTransaction(ctx) + return utils.Wrap(err, "transaction failed") + } } session.CommitTransaction(ctx) return err @@ -1102,7 +1106,7 @@ func (d *DataBases) RemoveGroupFromUser(ctx, sCtx context.Context, groupID strin }) } c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cUserToSuperGroup) - _, err := c.UpdateOne(sCtx, bson.M{"user_id": groupID}, bson.M{"$pull": bson.M{"group_id_list": groupID}}) + _, err := c.UpdateOne(sCtx, bson.M{"user_id": userID}, bson.M{"$pull": groupID}) if err != nil { return utils.Wrap(err, "UpdateOne transaction failed") }