package service import ( "context" "errors" "icloudapp.cn/tools/entity" _ "icloudapp.cn/tools/entity" "icloudapp.cn/tools/repository/mysql" _ "icloudapp.cn/tools/repository/mysql" "icloudapp.cn/tools/util" ) type User struct { ctx context.Context } func NewUser(ctx context.Context) *User { return &User{ctx} } func (u *User) TableName() string { return "user" } func (u *User) UserInfoByID(uid int64) (entity.UserInfo, error) { var userInfo entity.UserInfo var user entity.User result := mysql.DBConn.Select( "uid", "nickname", "password", "salt", "avatar", "create_at", "update_at", ).Where("uid = ?", uid).Table(u.TableName()).Find(&user) if result.Error != nil { userInfo.Code = entity.CodeServerBusy userInfo.Msg = result.Error.Error() return userInfo, result.Error } if result.RowsAffected == 0 { user.Uid = 0 userInfo.Code = entity.CodeDataDoesNotExist } userInfo.Body = user return userInfo, nil } // UserInfoByUsername 通过nickname获取用户信息 func (u *User) UserInfoByUsername(username string) (userInfo *entity.User, err error) { result := mysql.DBConn.Select( "uid", "nickname", "password", "salt", "avatar", "create_at", "update_at", ).Where("nickname = ?", username).Table(u.TableName()).Find(&userInfo) if result.Error != nil { return userInfo, util.NewError(result.Error.Error()) } if result.RowsAffected == 0 { userInfo.Uid = 0 } return userInfo, nil } // UserInfoByEmail 通过邮箱获取用户信息 func (u *User) UserInfoByEmail(email string) (userInfo *entity.User, err error) { result := mysql.DBConn.Select( "uid", "nickname", "password", "salt", "avatar", "create_at", "update_at", ).Where("email = ?", email).Table(u.TableName()).Find(&userInfo) if result.Error != nil { return nil, util.NewError(result.Error.Error()) } if result.RowsAffected == 0 { userInfo.Email = "" } return userInfo, nil } // Register 用户注册 func (u *User) Register(register entity.User) (userInfo entity.UserInfo, err error) { //check nickname, email 是否已注册 existUsername, errInfo := u.UserInfoByUsername(register.Username) if errInfo != nil { userInfo.Msg = entity.CodeServerBusy.Msg() userInfo.Code = entity.CodeServerBusy return userInfo, errors.New(errInfo.Error()) } if existUsername.Uid > 0 { userInfo.Msg = "用户名已经被注册" userInfo.Code = entity.CodeUserExist userInfo.Body = *existUsername return userInfo, entity.CodeUserExist.Error() } existEmail, err := u.UserInfoByEmail(register.Email) if err != nil { userInfo.Msg = entity.CodeServerBusy.Msg() userInfo.Code = entity.CodeServerBusy return userInfo, errors.New(errInfo.Error()) } if existEmail.Uid > 0 { userInfo.Msg = entity.CodeEmailExist.Msg() userInfo.Code = entity.CodeEmailExist userInfo.Body = *existEmail return userInfo, entity.CodeEmailExist.Error() } dbErr := mysql.DBConn.Table(u.TableName()).Create(®ister) if dbErr.Error != nil { return userInfo, errors.New(dbErr.Error.Error()) } userInfo.Body = register return userInfo, nil }