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) 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 return nil, err
} }
switch req.HandleResult { 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 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) 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 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 removes specified users from a group.
DeleteGroupMember(ctx context.Context, groupID string, userIDs []string) error DeleteGroupMember(ctx context.Context, groupID string, userIDs []string) error
// MapGroupMemberUserID maps group IDs to their members' simplified user IDs. // 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) 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 { 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 return err
} }
if member != nil { 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 { if err := g.groupMemberDB.Create(ctx, []*model.GroupMember{member}); err != nil {
return err return err
} }
c = c.DelGroupMembersHash(groupID). c = c.DelGroupMembersHash(request.GroupID).
DelGroupMembersInfo(groupID, member.UserID). DelGroupMembersInfo(request.GroupID, member.UserID).
DelGroupMemberIDs(groupID). DelGroupMemberIDs(request.GroupID).
DelGroupsMemberNum(groupID). DelGroupsMemberNum(request.GroupID).
DelJoinedGroupID(member.UserID). DelJoinedGroupID(member.UserID).
DelGroupRoleLevel(groupID, []int32{member.RoleLevel}). DelGroupRoleLevel(request.GroupID, []int32{member.RoleLevel}).
DelMaxJoinGroupVersion(userID). DelMaxJoinGroupVersion(request.UserID).
DelMaxGroupMemberVersion(groupID) DelMaxGroupMemberVersion(request.GroupID)
if err := c.ChainExecDel(ctx); err != nil { if err := c.ChainExecDel(ctx); err != nil {
return err return err
} }

@ -24,7 +24,7 @@ import (
type GroupRequest interface { type GroupRequest interface {
Create(ctx context.Context, groupRequests []*model.GroupRequest) (err error) Create(ctx context.Context, groupRequests []*model.GroupRequest) (err error)
Delete(ctx context.Context, groupID string, userID string) (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) Take(ctx context.Context, groupID string, userID string) (groupRequest *model.GroupRequest, err error)
FindGroupRequests(ctx context.Context, groupID string, userIDs []string) ([]*model.GroupRequest, 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) 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}) 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) { func (g *GroupRequestMgo) UpdateHandler(ctx context.Context, request *model.GroupRequest) (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) 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) { 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