pull/3802/merge
OpenIM-Gordon 2 weeks ago committed by GitHub
commit 313a9f3aac
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -880,7 +880,8 @@ func (s *groupServer) GroupApplicationResponse(ctx context.Context, req *pbgroup
}
}
log.ZDebug(ctx, "GroupApplicationResponse", "inGroup", inGroup, "HandleResult", req.HandleResult, "member", member)
if err := s.db.HandlerGroupRequest(ctx, req.GroupID, req.FromUserID, req.HandledMsg, req.HandleResult, member); err != nil {
handledRequest := convert.Pb2DbGroupRequest(req, mcontext.GetOpUserID(ctx))
if err := s.db.HandlerGroupRequest(ctx, handledRequest, member); err != nil {
return nil, err
}
switch req.HandleResult {

@ -81,7 +81,7 @@ type GroupDatabase interface {
// SearchGroupMember searches for group members based on a keyword, group ID, and pagination settings.
SearchGroupMember(ctx context.Context, keyword string, groupID string, pagination pagination.Pagination) (int64, []*model.GroupMember, error)
// HandlerGroupRequest processes a group join request with a specified result.
HandlerGroupRequest(ctx context.Context, groupID string, userID string, handledMsg string, handleResult int32, member *model.GroupMember) error
HandlerGroupRequest(ctx context.Context, request *model.GroupRequest, member *model.GroupMember) error
// DeleteGroupMember removes specified users from a group.
DeleteGroupMember(ctx context.Context, groupID string, userIDs []string) error
// MapGroupMemberUserID maps group IDs to their members' simplified user IDs.
@ -359,9 +359,9 @@ func (g *groupDatabase) SearchGroupMember(ctx context.Context, keyword string, g
return g.groupMemberDB.SearchMember(ctx, keyword, groupID, pagination)
}
func (g *groupDatabase) HandlerGroupRequest(ctx context.Context, groupID string, userID string, handledMsg string, handleResult int32, member *model.GroupMember) error {
func (g *groupDatabase) HandlerGroupRequest(ctx context.Context, request *model.GroupRequest, member *model.GroupMember) error {
return g.ctxTx.Transaction(ctx, func(ctx context.Context) error {
if err := g.groupRequestDB.UpdateHandler(ctx, groupID, userID, handledMsg, handleResult); err != nil {
if err := g.groupRequestDB.UpdateHandler(ctx, request); err != nil {
return err
}
if member != nil {
@ -369,14 +369,14 @@ func (g *groupDatabase) HandlerGroupRequest(ctx context.Context, groupID string,
if err := g.groupMemberDB.Create(ctx, []*model.GroupMember{member}); err != nil {
return err
}
c = c.DelGroupMembersHash(groupID).
DelGroupMembersInfo(groupID, member.UserID).
DelGroupMemberIDs(groupID).
DelGroupsMemberNum(groupID).
c = c.DelGroupMembersHash(request.GroupID).
DelGroupMembersInfo(request.GroupID, member.UserID).
DelGroupMemberIDs(request.GroupID).
DelGroupsMemberNum(request.GroupID).
DelJoinedGroupID(member.UserID).
DelGroupRoleLevel(groupID, []int32{member.RoleLevel}).
DelMaxJoinGroupVersion(userID).
DelMaxGroupMemberVersion(groupID)
DelGroupRoleLevel(request.GroupID, []int32{member.RoleLevel}).
DelMaxJoinGroupVersion(request.UserID).
DelMaxGroupMemberVersion(request.GroupID)
if err := c.ChainExecDel(ctx); err != nil {
return err
}

@ -24,7 +24,7 @@ import (
type GroupRequest interface {
Create(ctx context.Context, groupRequests []*model.GroupRequest) (err error)
Delete(ctx context.Context, groupID string, userID string) (err error)
UpdateHandler(ctx context.Context, groupID string, userID string, handledMsg string, handleResult int32) (err error)
UpdateHandler(ctx context.Context, request *model.GroupRequest) (err error)
Take(ctx context.Context, groupID string, userID string) (groupRequest *model.GroupRequest, err error)
FindGroupRequests(ctx context.Context, groupID string, userIDs []string) ([]*model.GroupRequest, error)
Page(ctx context.Context, userID string, groupIDs []string, handleResults []int, pagination pagination.Pagination) (total int64, groups []*model.GroupRequest, err error)

@ -65,8 +65,17 @@ func (g *GroupRequestMgo) Delete(ctx context.Context, groupID string, userID str
return mongoutil.DeleteOne(ctx, g.coll, bson.M{"group_id": groupID, "user_id": userID})
}
func (g *GroupRequestMgo) UpdateHandler(ctx context.Context, groupID string, userID string, handledMsg string, handleResult int32) (err error) {
return mongoutil.UpdateOne(ctx, g.coll, bson.M{"group_id": groupID, "user_id": userID}, bson.M{"$set": bson.M{"handle_msg": handledMsg, "handle_result": handleResult}}, true)
func (g *GroupRequestMgo) UpdateHandler(ctx context.Context, request *model.GroupRequest) (err error) {
return mongoutil.UpdateOne(ctx, g.coll, bson.M{"group_id": request.GroupID, "user_id": request.UserID}, bson.M{"$set": groupRequestHandlerUpdate(request)}, true)
}
func groupRequestHandlerUpdate(request *model.GroupRequest) bson.M {
return bson.M{
"handled_msg": request.HandledMsg,
"handle_result": request.HandleResult,
"handle_user_id": request.HandleUserID,
"handled_time": request.HandledTime,
}
}
func (g *GroupRequestMgo) Take(ctx context.Context, groupID string, userID string) (groupRequest *model.GroupRequest, err error) {

@ -0,0 +1,32 @@
package mgo
import (
"testing"
"time"
"github.com/openimsdk/open-im-server/v3/pkg/common/storage/model"
"github.com/openimsdk/protocol/constant"
)
func TestGroupRequestHandlerUpdate(t *testing.T) {
handledTime := time.Date(2026, time.September, 17, 12, 0, 0, 0, time.UTC)
update := groupRequestHandlerUpdate(&model.GroupRequest{
HandleResult: constant.GroupResponseAgree,
HandledMsg: "approved",
HandleUserID: "admin",
HandledTime: handledTime,
})
if _, ok := update["handle_msg"]; ok {
t.Fatal("handler update contains obsolete handle_msg field")
}
want := map[string]any{
"handled_msg": "approved", "handle_result": int32(constant.GroupResponseAgree),
"handle_user_id": "admin", "handled_time": handledTime,
}
for key, expected := range want {
if got := update[key]; got != expected {
t.Fatalf("handler update %s = %v, want %v", key, got, expected)
}
}
}
Loading…
Cancel
Save