diff --git a/internal/rpc/user/user.go b/internal/rpc/user/user.go index e81653780..8e53276dd 100644 --- a/internal/rpc/user/user.go +++ b/internal/rpc/user/user.go @@ -29,15 +29,15 @@ type userServer struct { } func Start(client *openKeeper.ZkClient, server *grpc.Server) error { - mysql, err := relation.NewGormDB() + gormDB, err := relation.NewGormDB() if err != nil { return err } - if err := mysql.AutoMigrate(&tablerelation.UserModel{}); err != nil { + if err := gormDB.AutoMigrate(&tablerelation.UserModel{}); err != nil { return err } pbuser.RegisterUserServer(server, &userServer{ - UserInterface: controller.NewUserController(mysql), + UserInterface: controller.NewUserController(controller.NewUserDatabase(relation.NewUserGorm(gormDB))), notification: notification.NewCheck(client), userCheck: check.NewUserCheck(client), RegisterCenter: client, diff --git a/pkg/common/db/controller/user.go b/pkg/common/db/controller/user.go index 0cdab97e1..cb261b45d 100644 --- a/pkg/common/db/controller/user.go +++ b/pkg/common/db/controller/user.go @@ -5,7 +5,6 @@ import ( "Open_IM/pkg/common/db/relation" relationTb "Open_IM/pkg/common/db/table/relation" "context" - "gorm.io/gorm" ) type UserInterface interface { @@ -62,9 +61,8 @@ func (u *UserController) GetAllUserID(ctx context.Context) ([]string, error) { return u.database.GetAllUserID(ctx) } -func NewUserController(db *gorm.DB) *UserController { - controller := &UserController{database: newUserDatabase(db)} - return controller +func NewUserController(database UserDatabaseInterface) *UserController { + return &UserController{database} } type UserDatabaseInterface interface { @@ -87,20 +85,17 @@ type UserDatabaseInterface interface { } type UserDatabase struct { - user *relation.UserGorm + userDB relation.User } -func newUserDatabase(db *gorm.DB) *UserDatabase { - sqlDB := relation.NewUserGorm(db) - database := &UserDatabase{ - user: sqlDB, - } - return database +func NewUserDatabase(userDB relation.User) *UserDatabase { + return &UserDatabase{userDB: userDB} } // 获取指定用户的信息 如有userID未找到 也返回错误 func (u *UserDatabase) FindWithError(ctx context.Context, userIDs []string) (users []*relationTb.UserModel, err error) { - users, err = u.user.Find(ctx, userIDs) + + users, err = u.userDB.Find(ctx, userIDs) if err != nil { return } @@ -112,33 +107,33 @@ func (u *UserDatabase) FindWithError(ctx context.Context, userIDs []string) (use // 获取指定用户的信息 如有userID未找到 不返回错误 func (u *UserDatabase) Find(ctx context.Context, userIDs []string) (users []*relationTb.UserModel, err error) { - users, err = u.user.Find(ctx, userIDs) + users, err = u.userDB.Find(ctx, userIDs) return } // 插入多条 外部保证userID 不重复 且在db中不存在 func (u *UserDatabase) Create(ctx context.Context, users []*relationTb.UserModel) (err error) { - return u.user.Create(ctx, users) + return u.userDB.Create(ctx, users) } // 更新(非零值) 外部保证userID存在 func (u *UserDatabase) Update(ctx context.Context, users []*relationTb.UserModel) (err error) { - return u.user.Update(ctx, users) + return u.userDB.Update(ctx, users) } // 更新(零值) 外部保证userID存在 func (u *UserDatabase) UpdateByMap(ctx context.Context, userID string, args map[string]interface{}) (err error) { - return u.user.UpdateByMap(ctx, userID, args) + return u.userDB.UpdateByMap(ctx, userID, args) } // 获取,如果没找到,不返回错误 func (u *UserDatabase) Page(ctx context.Context, showNumber, pageNumber int32) (users []*relationTb.UserModel, count int64, err error) { - return u.user.Page(ctx, showNumber, pageNumber) + return u.userDB.Page(ctx, showNumber, pageNumber) } // userIDs是否存在 只要有一个存在就为true func (u *UserDatabase) IsExist(ctx context.Context, userIDs []string) (exist bool, err error) { - users, err := u.user.Find(ctx, userIDs) + users, err := u.userDB.Find(ctx, userIDs) if err != nil { return false, err } @@ -149,5 +144,5 @@ func (u *UserDatabase) IsExist(ctx context.Context, userIDs []string) (exist boo } func (u *UserDatabase) GetAllUserID(ctx context.Context) ([]string, error) { - return u.user.GetAllUserID(ctx) + return u.userDB.GetAllUserID(ctx) } diff --git a/pkg/common/db/relation/mysql_init.go b/pkg/common/db/relation/mysql_init.go index 92f80a176..a454eb9d5 100644 --- a/pkg/common/db/relation/mysql_init.go +++ b/pkg/common/db/relation/mysql_init.go @@ -58,6 +58,7 @@ func newMysqlGormDB() (*gorm.DB, error) { return db, nil } +// gorm mysql func NewGormDB() (*gorm.DB, error) { return newMysqlGormDB() } diff --git a/pkg/common/db/relation/user_model.go b/pkg/common/db/relation/user_model.go index a3b573d94..ebc8ed2f2 100644 --- a/pkg/common/db/relation/user_model.go +++ b/pkg/common/db/relation/user_model.go @@ -5,18 +5,28 @@ import ( "Open_IM/pkg/common/tracelog" "Open_IM/pkg/utils" "context" - "fmt" "gorm.io/gorm" ) +type User interface { + Create(ctx context.Context, users []*relation.UserModel, tx ...any) (err error) + UpdateByMap(ctx context.Context, userID string, args map[string]interface{}, tx ...any) (err error) + Update(ctx context.Context, users []*relation.UserModel, tx ...any) (err error) + // 获取指定用户信息 不存在,也不返回错误 + Find(ctx context.Context, userIDs []string, tx ...any) (users []*relation.UserModel, err error) + // 获取某个用户信息 不存在,则返回错误 + Take(ctx context.Context, userID string, tx ...any) (user *relation.UserModel, err error) + // 获取用户信息 不存在,不返回错误 + Page(ctx context.Context, pageNumber, showNumber int32, tx ...any) (users []*relation.UserModel, count int64, err error) + GetAllUserID(ctx context.Context) (userIDs []string, err error) +} + type UserGorm struct { DB *gorm.DB } -func NewUserGorm(db *gorm.DB) *UserGorm { - var user UserGorm - user.DB = db - return &user +func NewUserGorm(DB *gorm.DB) *UserGorm { + return &UserGorm{DB: DB} } // 插入多条 @@ -62,32 +72,6 @@ func (u *UserGorm) Take(ctx context.Context, userID string, tx ...any) (user *re return user, err } -// 通过名字查找用户 不存在,不返回错误 -func (u *UserGorm) GetByName(ctx context.Context, userName string, pageNumber, showNumber int32, tx ...any) (users []*relation.UserModel, count int64, err error) { - defer func() { - tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "userName", userName, "pageNumber", pageNumber, "showNumber", showNumber, "users", users, "count", count) - }() - err = utils.Wrap(getDBConn(u.DB, tx).Model(&relation.UserModel{}).Where(" name like ?", fmt.Sprintf("%%%s%%", userName)).Count(&count).Error, "") - if err != nil { - return - } - err = utils.Wrap(getDBConn(u.DB, tx).Model(&relation.UserModel{}).Where(" name like ?", fmt.Sprintf("%%%s%%", userName)).Limit(int(showNumber)).Offset(int(showNumber*pageNumber)).Find(&users).Error, "") - return -} - -// 通过名字或userID查找用户 不存在,不返回错误 -func (u *UserGorm) GetByNameAndID(ctx context.Context, content string, pageNumber, showNumber int32, tx ...any) (users []*relation.UserModel, count int64, err error) { - defer func() { - tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "content", content, "pageNumber", pageNumber, "showNumber", showNumber, "users", users, "count", count) - }() - db := getDBConn(u.DB, tx).Model(&relation.UserModel{}).Where(" name like ? or user_id = ? ", fmt.Sprintf("%%%s%%", content), content) - if err = db.Count(&count).Error; err != nil { - return - } - err = utils.Wrap(db.Limit(int(showNumber)).Offset(int(showNumber*pageNumber)).Find(&users).Error, "") - return -} - // 获取用户信息 不存在,不返回错误 func (u *UserGorm) Page(ctx context.Context, pageNumber, showNumber int32, tx ...any) (users []*relation.UserModel, count int64, err error) { defer func() { @@ -102,8 +86,11 @@ func (u *UserGorm) Page(ctx context.Context, pageNumber, showNumber int32, tx .. } // 获取所有用户ID -func (u *UserGorm) GetAllUserID(ctx context.Context) ([]string, error) { - var userIDs []string - err := u.DB.Pluck("user_id", &userIDs).Error +func (u *UserGorm) GetAllUserID(ctx context.Context) (userIDs []string, err error) { + defer func() { + tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "userIDs", userIDs) + }() + + err = u.DB.Pluck("user_id", &userIDs).Error return userIDs, err }