diff --git a/internal/rpc/user/user.go b/internal/rpc/user/user.go index 56522a9a2..f6048a21d 100644 --- a/internal/rpc/user/user.go +++ b/internal/rpc/user/user.go @@ -17,7 +17,6 @@ import ( pbUser "Open_IM/pkg/proto/user" "Open_IM/pkg/utils" "context" - "errors" "net" "strconv" "strings" @@ -26,7 +25,6 @@ import ( utils2 "Open_IM/internal/utils" "google.golang.org/grpc" - "gorm.io/gorm" ) type userServer struct { @@ -559,49 +557,50 @@ func (s *userServer) GetUsers(ctx context.Context, req *pbUser.GetUsersReq) (*pb } if req.UserName != "" { - usersDB, err = imdb.GetUserByName(req.UserName, req.Pagination.ShowNumber, req.Pagination.PageNumber) + usersDB, total, err := s.GetByName(ctx, req.UserName, req.Pagination.ShowNumber, req.Pagination.PageNumber) if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), req.UserName, req.Pagination.ShowNumber, req.Pagination.PageNumber, err.Error()) - resp.CommonResp.ErrCode = constant.ErrDB.ErrCode - resp.CommonResp.ErrMsg = constant.ErrDB.ErrMsg - return resp, nil + return nil, err } - resp.TotalNums, err = imdb.GetUsersCount(req.UserName) - if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), req.UserName, err.Error()) - resp.CommonResp.ErrCode = constant.ErrDB.ErrCode - resp.CommonResp.ErrMsg = err.Error() - return resp, nil + resp.Total = int32(total) + for _, v := range usersDB { + u1, err := utils2.NewDBUser(v).Convert() + if err != nil { + return nil, err + } + resp.Users = append(resp.Users, u1) } - + return &resp, nil } else if req.Content != "" { - var count int64 - usersDB, count, err = imdb.GetUsersByNameAndID(req.Content, req.Pagination.ShowNumber, req.Pagination.PageNumber) + usersDB, total, err := s.GetByNameAndID(ctx, req.UserName, req.Pagination.ShowNumber, req.Pagination.PageNumber) if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetUsers failed", req.Pagination.ShowNumber, req.Pagination.PageNumber, err.Error()) - resp.CommonResp.ErrCode = constant.ErrDB.ErrCode - resp.CommonResp.ErrMsg = err.Error() - return resp, nil + return nil, err } - resp.TotalNums = int32(count) + resp.Total = int32(total) + for _, v := range usersDB { + u1, err := utils2.NewDBUser(v).Convert() + if err != nil { + return nil, err + } + resp.Users = append(resp.Users, u1) + } + return &resp, nil } - else { - usersDB, err = imdb.GetUsers(req.Pagination.ShowNumber, req.Pagination.PageNumber) - if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetUsers failed", req.Pagination.ShowNumber, req.Pagination.PageNumber, err.Error()) - resp.CommonResp.ErrCode = constant.ErrDB.ErrCode - resp.CommonResp.ErrMsg = err.Error() - return resp, nil - } - resp.TotalNums, err = imdb.GetTotalUserNum() - if err != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error()) - resp.CommonResp.ErrCode = constant.ErrDB.ErrCode - resp.CommonResp.ErrMsg = err.Error() - return resp, nil - } + usersDB, err = imdb.GetUsers(req.Pagination.ShowNumber, req.Pagination.PageNumber) + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetUsers failed", req.Pagination.ShowNumber, req.Pagination.PageNumber, err.Error()) + resp.CommonResp.ErrCode = constant.ErrDB.ErrCode + resp.CommonResp.ErrMsg = err.Error() + return resp, nil } + resp.TotalNums, err = imdb.GetTotalUserNum() + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error()) + resp.CommonResp.ErrCode = constant.ErrDB.ErrCode + resp.CommonResp.ErrMsg = err.Error() + return resp, nil + } + for _, userDB := range usersDB { var user sdkws.UserInfo utils.CopyStructFields(&user, userDB) diff --git a/pkg/common/db/controller/user.go b/pkg/common/db/controller/user.go index 169c051bf..1fcba9060 100644 --- a/pkg/common/db/controller/user.go +++ b/pkg/common/db/controller/user.go @@ -12,7 +12,9 @@ type UserInterface interface { Take(ctx context.Context, userID string) (user *relation.User, err error) Update(ctx context.Context, users []*relation.User) (err error) UpdateByMap(ctx context.Context, userID string, args map[string]interface{}) (err error) - GetByName(ctx context.Context, userName string, showNumber, pageNumber int32) (users []*relation.User, err error) + GetByName(ctx context.Context, userName string, showNumber, pageNumber int32) (users []*relation.User, count int64, err error) + GetByNameAndID(ctx context.Context, content string, showNumber, pageNumber int32) (users []*relation.User, count int64, err error) + Get(ctx context.Context, showNumber, pageNumber int32) (users []*relation.User, count int64, err error) } type UserController struct { @@ -34,10 +36,15 @@ func (u *UserController) Update(ctx context.Context, users []*relation.User) (er func (u *UserController) UpdateByMap(ctx context.Context, userID string, args map[string]interface{}) (err error) { return u.database.UpdateByMap(ctx, userID, args) } -func (u *UserController) GetByName(ctx context.Context, userName string, showNumber, pageNumber int32) (users []*relation.User, err error) { +func (u *UserController) GetByName(ctx context.Context, userName string, showNumber, pageNumber int32) (users []*relation.User, count int64, err error) { return u.database.GetByName(ctx, userName, showNumber, pageNumber) } - +func (u *UserController) GetByNameAndID(ctx context.Context, content string, showNumber, pageNumber int32) (users []*relation.User, count int64, err error) { + return u.database.GetByNameAndID(ctx, content, showNumber, pageNumber) +} +func (u *UserController) Get(ctx context.Context, showNumber, pageNumber int32) (users []*relation.User, count int64, err error) { + return u.database.Get(ctx, showNumber, pageNumber) +} func NewUserController(db *gorm.DB) UserInterface { controller := &UserController{database: newUserDatabase(db)} return controller @@ -49,7 +56,9 @@ type UserDatabaseInterface interface { Take(ctx context.Context, userID string) (user *relation.User, err error) Update(ctx context.Context, users []*relation.User) (err error) UpdateByMap(ctx context.Context, userID string, args map[string]interface{}) (err error) - GetByName(ctx context.Context, userName string, showNumber, pageNumber int32) (users []*relation.User, err error) + GetByName(ctx context.Context, userName string, showNumber, pageNumber int32) (users []*relation.User, count int64, err error) + GetByNameAndID(ctx context.Context, content string, showNumber, pageNumber int32) (users []*relation.User, count int64, err error) + Get(ctx context.Context, showNumber, pageNumber int32) (users []*User, count int64, err error) } type UserDatabase struct { @@ -80,6 +89,12 @@ func (u *UserDatabase) Update(ctx context.Context, users []*relation.User) (err func (u *UserDatabase) UpdateByMap(ctx context.Context, userID string, args map[string]interface{}) (err error) { return u.sqlDB.UpdateByMap(ctx, userID, args) } -func (u *UserDatabase) GetByName(ctx context.Context, userName string, showNumber, pageNumber int32) (users []*relation.User, err error) { +func (u *UserDatabase) GetByName(ctx context.Context, userName string, showNumber, pageNumber int32) (users []*relation.User, count int64, err error) { return u.sqlDB.GetByName(ctx, userName, showNumber, pageNumber) } +func (u *UserDatabase) GetByNameAndID(ctx context.Context, content string, showNumber, pageNumber int32) (users []*relation.User, count int64, err error) { + return u.sqlDB.GetByNameAndID(ctx, content, showNumber, pageNumber) +} +func (u *UserDatabase) Get(ctx context.Context, showNumber, pageNumber int32) (users []*relation.User, count int64, err error) { + return u.sqlDB.Get(ctx, showNumber, pageNumber) +} diff --git a/pkg/common/db/relation/user_model_k.go b/pkg/common/db/relation/user_model_k.go index 2d147dc69..837efed9e 100644 --- a/pkg/common/db/relation/user_model_k.go +++ b/pkg/common/db/relation/user_model_k.go @@ -71,10 +71,37 @@ func (u *User) Take(ctx context.Context, userID string) (user *User, err error) return user, err } -func (u *User) GetByName(ctx context.Context, userName string, showNumber, pageNumber int32) (users []*User, err error) { +func (u *User) GetByName(ctx context.Context, userName string, showNumber, pageNumber int32) (users []*User, count int64, err error) { defer func() { - trace_log.SetCtxDebug(ctx, utils.GetFuncName(1), err, "userName", userName, "showNumber", showNumber, "pageNumber", pageNumber, "users", users) + trace_log.SetCtxDebug(ctx, utils.GetFuncName(1), err, "userName", userName, "showNumber", showNumber, "pageNumber", pageNumber, "users", users, "count", count) }() - err = u.DB.Where(" name like ?", fmt.Sprintf("%%%s%%", userName)).Limit(int(showNumber)).Offset(int(showNumber * (pageNumber - 1))).Find(&users).Error - return users, utils.Wrap(err, "") + err = u.DB.Where(" name like ?", fmt.Sprintf("%%%s%%", userName)).Limit(int(showNumber)).Offset(int(showNumber * pageNumber)).Find(&users).Error + if err != nil { + return nil, 0, utils.Wrap(err, "") + } + return users, count, utils.Wrap(u.DB.Where(" name like ? ", fmt.Sprintf("%%%s%%", userName)).Count(&count).Error, "") +} + +func (u *User) GetByNameAndID(ctx context.Context, content string, showNumber, pageNumber int32) (users []*User, count int64, err error) { + defer func() { + trace_log.SetCtxDebug(ctx, utils.GetFuncName(1), err, "content", content, "showNumber", showNumber, "pageNumber", pageNumber, "users", users, "count", count) + }() + db := u.DB.Where(" name like ? or user_id = ? ", fmt.Sprintf("%%%s%%", content), content) + if err := db.Count(&count).Error; err != nil { + return nil, 0, utils.Wrap(err, "") + } + err = utils.Wrap(db.Limit(int(showNumber)).Offset(int(showNumber*pageNumber)).Find(&users).Error, "") + return +} + +func (u *User) Get(ctx context.Context, showNumber, pageNumber int32) (users []*User, count int64, err error) { + defer func() { + trace_log.SetCtxDebug(ctx, utils.GetFuncName(1), err, "showNumber", showNumber, "pageNumber", pageNumber, "users", users, "count", count) + }() + err = u.DB.Model(u).Count(&count).Error + if err != nil { + return nil, 0, utils.Wrap(err, "") + } + err = utils.Wrap(u.DB.Limit(int(showNumber)).Offset(int(pageNumber*showNumber)).Find(&users).Error, "") + return }