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 Role string } func NewUser(ctx context.Context) *User { return &User{ctx, ""} } // SetRole 设置用户权限 func (u *User) SetRole(role string) { u.Role = role } // TableName 设置表名称 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 } // ChangePassword 通过用户ID更改密码 func (u *User) ChangePassword(uid int64, password, slat string) (userInfo entity.UserInfo, err error) { userInfo, errInfo := u.UserInfoByID(uid) if err != nil { userInfo.Msg = entity.CodeServerBusy.Msg() userInfo.Code = entity.CodeServerBusy return userInfo, errors.New(errInfo.Error()) } var user entity.User user.Uid = uid user.Salt = slat user.Status = userInfo.Body.Status user.Password = password result := mysql.DBConn.Table(u.TableName()).Where("uid = ?", uid).UpdateColumns(&user) if result.Error != nil { return userInfo, result.Error } return userInfo, nil } // ChangeEmail 更换邮件地址,邮件地址必须是唯一的 func (u *User) ChangeEmail(uid int64, email string) (userInfo entity.UserInfo, err error) { userInfo, errInfo := u.UserInfoByID(uid) if err != nil { userInfo.Msg = entity.CodeServerBusy.Msg() userInfo.Code = entity.CodeServerBusy return userInfo, errors.New(errInfo.Error()) } existEmail, err := u.UserInfoByEmail(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() } var user entity.User user.Uid = uid user.Email = email result := mysql.DBConn.Table(u.TableName()).Where("uid = ?", uid).UpdateColumns(&user) if result.Error != nil { return userInfo, result.Error } return userInfo, nil }