package models import ( "errors" ) // 用户表 type User struct { BaseModel Username string `gorm:"index:;index:idx_username_password,priority:1;type:varchar(50)" json:"username" validate:"required,email"` // 账号 Password string `gorm:"index:idx_username_password;type:varchar(32)" json:"password" validate:"required"` // 密码 Name string `gorm:"type:varchar(20)" json:"name"` // 名称 HeadImage string `gorm:"type:varchar(200)" json:"headImage"` // 头像地址 Status int `gorm:"type:tinyint(1)" json:"status"` // 状态 1.启用 2.停用 3.未激活 Role int `gorm:"type:int(11)" json:"role"` // 角色 1.管理员 2.普通用户 Mail string `gorm:"type:varchar(50)" json:"mail"` // 邮箱 ReferralCode string `gorm:"type:varchar(10)" json:"referralCode"` // 推荐码 Token string `gorm:"type:varchar(32)" json:"token"` UserId uint `gorm:"-" json:"userId"` } // 获取用户信息 func (m *User) GetUserInfoByUid(uid uint) (User, error) { mUser := User{} err := Db.Where("id=?", uid).First(&mUser).Error return mUser, err } // 根据用户名和密码查询用户 func (m *User) GetUserInfoByUsernameAndPassword(username, password string) (User, error) { userInfo := User{} err := Db.Where("username=?", username).Where("password=?", password).First(&userInfo).Error return userInfo, err } // 根据用户名查询用户 func (m *User) GetUserInfoByUsername(username string) (User, error) { mUser := User{} err := Db.Where("username=?", username).First(&mUser).Error return mUser, err } // 根据邮箱查询用户 func (m *User) GetUserInfoByMail() *User { mUser := User{} if Db.Where("mail=?", m.Mail).First(&mUser).Error != nil { return nil } return &mUser } // 根据token查询用户 func (m *User) GetUserInfoByToken(userToken string) (User, error) { mUser := User{} err := Db.Where("token=?", userToken).First(&mUser).Error return mUser, err } // 更新用户基于id // 支持:name,autograph,header_image,status,role,mail,token,password,username,gender func (m *User) UpdateUserInfoByUserId(user_id uint, updateInfo map[string]interface{}) error { mUser := User{} data := map[string]interface{}{} if v, ok := updateInfo["name"]; ok { data["name"] = v } if v, ok := updateInfo["head_image"]; ok { data["head_image"] = v } if v, ok := updateInfo["status"]; ok { data["status"] = v } if v, ok := updateInfo["role"]; ok { data["role"] = v } if v, ok := updateInfo["gender"]; ok { data["gender"] = v } if v, ok := updateInfo["mail"]; ok { hasUser := User{} count := Db.Where("mail=?", updateInfo["mail"]).First(&hasUser).RowsAffected if count != 0 && hasUser.ID != user_id { return errors.New("the mail already exists") } data["mail"] = v } if v, ok := updateInfo["username"]; ok { hasUser := User{} count := Db.Where("username=?", updateInfo["username"]).First(&hasUser).RowsAffected if count != 0 && hasUser.ID != user_id { return errors.New("the username already exists") } data["username"] = v } if v, ok := updateInfo["token"]; ok { data["token"] = v } if v, ok := updateInfo["password"]; ok { data["password"] = v } err := Db.Model(&mUser).Where("id=?", user_id).Updates(data).Error return err } // 添加一个 func (m *User) CreateOne() (User, error) { err := Db.Create(m).Error return *m, err } // 验证是否有重复的用户名或者邮箱 func (m *User) CheckMailAndUsername(mail, username string) error { hasUser := User{} count := Db.Where("mail=?", mail).First(&hasUser).RowsAffected if count != 0 { return errors.New("该邮箱已被注册") } count = Db.Where("username=?", username).First(&hasUser).RowsAffected if count != 0 { return errors.New("该用户名已被注册") } return nil } // 验证是否有重复的用户名或者邮箱 func (m *User) CheckMailExist(mail string) (User, error) { hasUser := User{} count := Db.Where("mail=?", mail).First(&hasUser).RowsAffected if count != 0 { return hasUser, errors.New("该邮箱已被注册") } return hasUser, nil } // 验证是否有重复的用户名或者邮箱 func (m *User) CheckUsernameExist(username string) (User, error) { hasUser := User{} count := Db.Where("username=?", username).First(&hasUser).RowsAffected if count != 0 { return hasUser, errors.New("该用户名已被注册") } return hasUser, nil } // // 根据用户名和密码查询用户 // func (m *User) CreateUser(uid uint) *User { // mUser := User{} // if Db.Where("id=?", uid).First(&mUser).Error != nil { // return nil // } else { // return &mUser // } // }