package service import ( "errors" "gorm.io/gorm" "website-nav/global/client" "website-nav/http/param" "website-nav/http/vo" "website-nav/model" "website-nav/utils" ) type user struct { *gorm.DB } func User() user { return user{client.DB} } // List // @description: 用户列表 // @receiver s // @param p // @return data // @return err func (s user) List(p param.UserList) (data []vo.UserItem, count int64, err error) { err = s.Model(&model.User{}).Scopes(Paginate(p.Current, p.Size)).Find(&data).Limit(-1).Offset(-1).Count(&count).Error return } // CreateUser // @description: 创建/更新用户 // @receiver s // @param user // @return err func (s user) CreateUser(user *model.User) (err error) { // 更新 if user.Id != "" { updates := map[string]any{ "nickname": user.Nickname, "contact": user.Contact, } return s.Model(&model.User{}).Where("id = ?", user.Id).Updates(&updates).Error } // 创建前判断账户是否已经存在 if _, err = s.GetUserByAccount(user.Account); err == nil { return errors.New("账号已存在,请勿重复创建") } defaultPassword := utils.Password().GenerateHashPassword("admin123") if user.Password == "" { // 没有密码给一个默认密码 user.Password = defaultPassword } else { user.Password = utils.Password().GenerateHashPassword(user.Password) } // 生成一个默认头像 if user.Avatar == "" { avatar, err := utils.Avatar().GenerateAvatar(true) if err != nil { return err } user.Avatar = avatar } // 创建 return s.Create(&user).Error } // Delete // @description: 删除指定用户 // @receiver s // @param id // @return error func (s user) Delete(id string) error { return s.Model(&model.User{}).Where("id = ?", id).Delete(&model.User{}).Error } // GetUserByAccount // @description: 通过账号获取用户信息 // @receiver user // @param account // @return data // @return err func (s user) GetUserByAccount(account string) (data vo.User, err error) { err = s.Model(&model.User{}).First(&data, "account = ?", account).Error return } // GetUserById // @description: 根据id获取用户信息 // @receiver s // @param id // @return data // @return err func (s user) GetUserById(id string) (data vo.User, err error) { err = s.Model(&model.User{}).Where("id = ?", id).Take(&data).Error return } // ChangePassword // @description: 修改密码 // @receiver s // @param id // @param password // @return error func (s user) ChangePassword(id, password string) error { return s.Model(&model.User{}).Where("id = ?", id).Update("password", utils.Password().GenerateHashPassword(password)).Error }