:tada:初步完成用户

This commit is contained in:
coward
2024-10-18 17:19:19 +08:00
commit f375118c88
45 changed files with 3302 additions and 0 deletions

25
service/base.go Normal file
View File

@@ -0,0 +1,25 @@
package service
import "gorm.io/gorm"
func Paginate(current, size int64) func(db *gorm.DB) *gorm.DB {
// 如果页码是-1就不分页
if current == -1 {
return func(db *gorm.DB) *gorm.DB {
return db
}
}
// 分页
return func(db *gorm.DB) *gorm.DB {
if current == 0 {
current = 1
}
if size < 1 {
size = 10
}
// 计算偏移量
offset := (current - 1) * size
// 返回组装结果
return db.Offset(int(offset)).Limit(int(size))
}
}

112
service/user.go Normal file
View File

@@ -0,0 +1,112 @@
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
}