113 lines
2.6 KiB
Go
113 lines
2.6 KiB
Go
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
|
|
}
|