diff --git a/internal/rpc/user/user.go b/internal/rpc/user/user.go index 98fb5bdd0..e4df2f3f2 100644 --- a/internal/rpc/user/user.go +++ b/internal/rpc/user/user.go @@ -45,7 +45,7 @@ func NewUserServer(port int) *userServer { } //mysql init var mysql relation.Mysql - var model relation.User + var model relation.UserGorm err := mysql.InitConn().AutoMigrateModel(&model) if err != nil { panic("db init err:" + err.Error()) diff --git a/pkg/common/db/controller/user.go b/pkg/common/db/controller/user.go index abb0a660b..0fefe77c6 100644 --- a/pkg/common/db/controller/user.go +++ b/pkg/common/db/controller/user.go @@ -2,19 +2,20 @@ package controller import ( "Open_IM/pkg/common/db/relation" + "Open_IM/pkg/common/db/table" "context" "gorm.io/gorm" ) type UserInterface interface { //获取指定用户的信息 如果有记录未找到 也返回错误 - Find(ctx context.Context, userIDs []string) (users []*relation.User, err error) - Create(ctx context.Context, users []*relation.User) error - Update(ctx context.Context, users []*relation.User) (err error) + Find(ctx context.Context, userIDs []string) (users []*table.UserModel, err error) + Create(ctx context.Context, users []*table.UserModel) error + Update(ctx context.Context, users []*table.UserModel) (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, 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) + GetByName(ctx context.Context, userName string, showNumber, pageNumber int32) (users []*table.UserModel, count int64, err error) + GetByNameAndID(ctx context.Context, content string, showNumber, pageNumber int32) (users []*table.UserModel, count int64, err error) + Get(ctx context.Context, showNumber, pageNumber int32) (users []*table.UserModel, count int64, err error) //userIDs是否存在 只要有一个存在就为true IsExist(ctx context.Context, userIDs []string) (exist bool, err error) } @@ -23,28 +24,28 @@ type UserController struct { database UserDatabaseInterface } -func (u *UserController) Find(ctx context.Context, userIDs []string) (users []*relation.User, err error) { +func (u *UserController) Find(ctx context.Context, userIDs []string) (users []*table.UserModel, err error) { return u.database.Find(ctx, userIDs) } -func (u *UserController) Create(ctx context.Context, users []*relation.User) error { +func (u *UserController) Create(ctx context.Context, users []*table.UserModel) error { return u.database.Create(ctx, users) } -func (u *UserController) Take(ctx context.Context, userID string) (user *relation.User, err error) { +func (u *UserController) Take(ctx context.Context, userID string) (user *table.UserModel, err error) { return u.database.Take(ctx, userID) } -func (u *UserController) Update(ctx context.Context, users []*relation.User) (err error) { +func (u *UserController) Update(ctx context.Context, users []*table.UserModel) (err error) { return u.database.Update(ctx, users) } 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, count int64, err error) { +func (u *UserController) GetByName(ctx context.Context, userName string, showNumber, pageNumber int32) (users []*table.UserModel, 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) { +func (u *UserController) GetByNameAndID(ctx context.Context, content string, showNumber, pageNumber int32) (users []*table.UserModel, 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) { +func (u *UserController) Get(ctx context.Context, showNumber, pageNumber int32) (users []*table.UserModel, count int64, err error) { return u.database.Get(ctx, showNumber, pageNumber) } func NewUserController(db *gorm.DB) *UserController { @@ -53,50 +54,50 @@ func NewUserController(db *gorm.DB) *UserController { } type UserDatabaseInterface interface { - Find(ctx context.Context, userIDs []string) (users []*relation.User, err error) - Create(ctx context.Context, users []*relation.User) error - Take(ctx context.Context, userID string) (user *relation.User, err error) - Update(ctx context.Context, users []*relation.User) (err error) + Find(ctx context.Context, userIDs []string) (users []*table.UserModel, err error) + Create(ctx context.Context, users []*table.UserModel) error + Take(ctx context.Context, userID string) (user *table.UserModel, err error) + Update(ctx context.Context, users []*table.UserModel) (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, 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) + GetByName(ctx context.Context, userName string, showNumber, pageNumber int32) (users []*table.UserModel, count int64, err error) + GetByNameAndID(ctx context.Context, content string, showNumber, pageNumber int32) (users []*table.UserModel, count int64, err error) + Get(ctx context.Context, showNumber, pageNumber int32) (users []*table.UserModel, count int64, err error) } type UserDatabase struct { - sqlDB *relation.User + sqlDB *relation.UserGorm } func newUserDatabase(db *gorm.DB) *UserDatabase { - sqlDB := relation.NewUserDB(db) + sqlDB := relation.NewUserGorm(db) database := &UserDatabase{ sqlDB: sqlDB, } return database } -func (u *UserDatabase) Find(ctx context.Context, userIDs []string) (users []*relation.User, err error) { +func (u *UserDatabase) Find(ctx context.Context, userIDs []string) (users []*table.UserModel, err error) { return u.sqlDB.Find(ctx, userIDs) } -func (u *UserDatabase) Create(ctx context.Context, users []*relation.User) error { +func (u *UserDatabase) Create(ctx context.Context, users []*table.UserModel) error { return u.sqlDB.Create(ctx, users) } -func (u *UserDatabase) Take(ctx context.Context, userID string) (user *relation.User, err error) { +func (u *UserDatabase) Take(ctx context.Context, userID string) (user *table.UserModel, err error) { return u.sqlDB.Take(ctx, userID) } -func (u *UserDatabase) Update(ctx context.Context, users []*relation.User) (err error) { +func (u *UserDatabase) Update(ctx context.Context, users []*table.UserModel) (err error) { return u.sqlDB.Update(ctx, users) } 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, count int64, err error) { +func (u *UserDatabase) GetByName(ctx context.Context, userName string, showNumber, pageNumber int32) (users []*table.UserModel, 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) { +func (u *UserDatabase) GetByNameAndID(ctx context.Context, content string, showNumber, pageNumber int32) (users []*table.UserModel, 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) { +func (u *UserDatabase) Get(ctx context.Context, showNumber, pageNumber int32) (users []*table.UserModel, 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 48e3e35b6..ce36d44fa 100644 --- a/pkg/common/db/relation/user_model_k.go +++ b/pkg/common/db/relation/user_model_k.go @@ -1,107 +1,94 @@ package relation import ( + "Open_IM/pkg/common/db/table" "Open_IM/pkg/common/tracelog" "Open_IM/pkg/utils" "context" "fmt" "gorm.io/gorm" - "time" ) -type User struct { - UserID string `gorm:"column:user_id;primary_key;size:64"` - Nickname string `gorm:"column:name;size:255"` - FaceURL string `gorm:"column:face_url;size:255"` - Gender int32 `gorm:"column:gender"` - PhoneNumber string `gorm:"column:phone_number;size:32"` - Birth time.Time `gorm:"column:birth"` - Email string `gorm:"column:email;size:64"` - Ex string `gorm:"column:ex;size:1024"` - CreateTime time.Time `gorm:"column:create_time;index:create_time"` - AppMangerLevel int32 `gorm:"column:app_manger_level"` - GlobalRecvMsgOpt int32 `gorm:"column:global_recv_msg_opt"` - - status int32 `gorm:"column:status"` - DB *gorm.DB `gorm:"-" json:"-"` +type UserGorm struct { + DB *gorm.DB } -func NewUserDB(db *gorm.DB) *User { - var user User +func NewUserGorm(db *gorm.DB) *UserGorm { + var user UserGorm user.DB = db return &user } -func (u *User) Create(ctx context.Context, users []*User) (err error) { +func (u *UserGorm) Create(ctx context.Context, users []*table.UserModel) (err error) { defer func() { tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "users", users) }() - err = utils.Wrap(u.DB.Create(&users).Error, "") + err = utils.Wrap(u.DB.Model(&table.UserModel{}).Create(&users).Error, "") return err } -func (u *User) UpdateByMap(ctx context.Context, userID string, args map[string]interface{}) (err error) { +func (u *UserGorm) UpdateByMap(ctx context.Context, userID string, args map[string]interface{}) (err error) { defer func() { tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "userID", userID, "args", args) }() - return utils.Wrap(u.DB.Where("user_id = ?", userID).Updates(args).Error, "") + return utils.Wrap(u.DB.Model(&table.UserModel{}).Where("user_id = ?", userID).Updates(args).Error, "") } -func (u *User) Update(ctx context.Context, users []*User) (err error) { +func (u *UserGorm) Update(ctx context.Context, users []*table.UserModel) (err error) { defer func() { tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "users", users) }() - return utils.Wrap(u.DB.Updates(&users).Error, "") + return utils.Wrap(u.DB.Model(&table.UserModel{}).Updates(&users).Error, "") } -func (u *User) Find(ctx context.Context, userIDs []string) (users []*User, err error) { +func (u *UserGorm) Find(ctx context.Context, userIDs []string) (users []*table.UserModel, err error) { defer func() { tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "userIDs", userIDs, "users", users) }() - err = utils.Wrap(u.DB.Where("user_id in (?)", userIDs).Find(&users).Error, "") + err = utils.Wrap(u.DB.Model(&table.UserModel{}).Where("user_id in (?)", userIDs).Find(&users).Error, "") return users, err } -func (u *User) Take(ctx context.Context, userID string) (user *User, err error) { - user = &User{} +func (u *UserGorm) Take(ctx context.Context, userID string) (user *table.UserModel, err error) { + user = &table.UserModel{} defer func() { tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "userID", userID, "user", *user) }() - err = utils.Wrap(u.DB.Where("user_id = ?", userID).Take(&user).Error, "") + err = utils.Wrap(u.DB.Model(&table.UserModel{}).Where("user_id = ?", userID).Take(&user).Error, "") return user, err } -func (u *User) GetByName(ctx context.Context, userName string, showNumber, pageNumber int32) (users []*User, count int64, err error) { +func (u *UserGorm) GetByName(ctx context.Context, userName string, showNumber, pageNumber int32) (users []*table.UserModel, count int64, err error) { defer func() { tracelog.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)).Find(&users).Error + err = u.DB.Model(&table.UserModel{}).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, "") + return users, count, utils.Wrap(u.DB.Model(&table.UserModel{}).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) { +func (u *UserGorm) GetByNameAndID(ctx context.Context, content string, showNumber, pageNumber int32) (users []*table.UserModel, count int64, err error) { defer func() { tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "content", content, "showNumber", showNumber, "pageNumber", pageNumber, "users", users) }() - db := u.DB.Where(" name like ? or user_id = ? ", fmt.Sprintf("%%%s%%", content), content) - if err := db.Count(&count).Error; err != nil { + db := u.DB.Model(&table.UserModel{}).Where(" name like ? or user_id = ? ", fmt.Sprintf("%%%s%%", content), content) + if err := db.Model(&table.UserModel{}).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) { +func (u *UserGorm) Get(ctx context.Context, showNumber, pageNumber int32) (users []*table.UserModel, count int64, err error) { defer func() { tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "showNumber", showNumber, "pageNumber", pageNumber, "users", users, "count", count) }() - err = u.DB.Model(u).Count(&count).Error + err = u.DB.Model(&table.UserModel{}).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, "") + err = utils.Wrap(u.DB.Model(&table.UserModel{}).Limit(int(showNumber)).Offset(int(pageNumber*showNumber)).Find(&users).Error, "") return } diff --git a/pkg/common/db/table/table.go b/pkg/common/db/table/table.go index 6702c194f..bdb4a98a4 100644 --- a/pkg/common/db/table/table.go +++ b/pkg/common/db/table/table.go @@ -89,3 +89,18 @@ type GroupRequestModel struct { InviterUserID string `gorm:"column:inviter_user_id;size:64"` Ex string `gorm:"column:ex;size:1024"` } + +type UserModel struct { + UserID string `gorm:"column:user_id;primary_key;size:64"` + Nickname string `gorm:"column:name;size:255"` + FaceURL string `gorm:"column:face_url;size:255"` + Gender int32 `gorm:"column:gender"` + PhoneNumber string `gorm:"column:phone_number;size:32"` + Birth time.Time `gorm:"column:birth"` + Email string `gorm:"column:email;size:64"` + Ex string `gorm:"column:ex;size:1024"` + CreateTime time.Time `gorm:"column:create_time;index:create_time"` + AppMangerLevel int32 `gorm:"column:app_manger_level"` + GlobalRecvMsgOpt int32 `gorm:"column:global_recv_msg_opt"` + status int32 `gorm:"column:status"` +}