diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 2175aee04..d345a4c03 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -165,25 +165,14 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR if req.OwnerUserID == "" { return nil, constant.ErrArgs.Wrap("no group owner") } - var userIDs []string - for _, userID := range req.InitMembers { - userIDs = append(userIDs, userID) - } - for _, userID := range req.AdminUserIDs { - userIDs = append(userIDs, userID) - } - userIDs = append(userIDs, req.OwnerUserID) - if utils.IsDuplicateID(userIDs) { + userIDs := append(append(req.InitMembers, req.AdminUserIDs...), req.OwnerUserID) + if utils.Duplicate(userIDs) { return nil, constant.ErrArgs.Wrap("group member repeated") } - users, err := getUsersInfo(ctx, userIDs) + userMap, err := getUserMap(ctx, userIDs) if err != nil { return nil, err } - userMap := make(map[string]*open_im_sdk.UserInfo) - for i, user := range users { - userMap[user.UserID] = users[i] - } for _, userID := range userIDs { if userMap[userID] == nil { return nil, constant.ErrUserIDNotFound.Wrap(userID) @@ -254,10 +243,9 @@ func (s *groupServer) GetJoinedGroupList(ctx context.Context, req *pbGroup.GetJo if len(groups) == 0 { return resp, nil } - var groupIDs []string - for _, group := range groups { - groupIDs = append(groupIDs, group.GroupID) - } + groupIDs := utils.Slice(groups, func(e *relation2.GroupModel) string { + return e.GroupID + }) groupMemberNum, err := s.GroupInterface.GetGroupMemberNum(ctx, groupIDs) if err != nil { return nil, err diff --git a/pkg/common/db/table/relation/group.go b/pkg/common/db/table/relation/group.go index 70c2d3681..1306eded4 100644 --- a/pkg/common/db/table/relation/group.go +++ b/pkg/common/db/table/relation/group.go @@ -12,7 +12,7 @@ type GroupModel struct { Notification string `gorm:"column:notification;size:255" json:"notification"` Introduction string `gorm:"column:introduction;size:255" json:"introduction"` FaceURL string `gorm:"column:face_url;size:255" json:"faceURL"` - CreateTime time.Time `gorm:"column:create_time;index:create_time"` + CreateTime time.Time `gorm:"column:create_time;index:create_time;autoCreateTime"` Ex string `gorm:"column:ex" json:"ex;size:1024" json:"ex"` Status int32 `gorm:"column:status"` CreatorUserID string `gorm:"column:creator_user_id;size:64"` diff --git a/pkg/utils/utils_v2.go b/pkg/utils/utils_v2.go index cabf9067e..94bd15cd9 100644 --- a/pkg/utils/utils_v2.go +++ b/pkg/utils/utils_v2.go @@ -144,6 +144,14 @@ func SliceSetAny[E any, K comparable](es []E, fn func(e E) K) map[K]struct{} { }) } +func Slice[E any, T any](es []E, fn func(e E) T) []T { + v := make([]T, len(es)) + for i := 0; i < len(es); i++ { + v = append(v, fn(es[i])) + } + return v +} + // SliceSet slice to map[E]struct{} func SliceSet[E comparable](es []E) map[E]struct{} { return SliceSetAny(es, func(e E) E {