108 lines
2.5 KiB
Go
108 lines
2.5 KiB
Go
package storage
|
|
|
|
import (
|
|
"goalfymax-admin/internal/models"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
// UserStorage 用户存储接口
|
|
type UserStorage interface {
|
|
Create(user *models.User) error
|
|
GetByID(id uint) (*models.User, error)
|
|
GetByUsername(username string) (*models.User, error)
|
|
GetByEmail(email string) (*models.User, error)
|
|
Update(user *models.User) error
|
|
Delete(id uint) error
|
|
List(req *models.UserListRequest) ([]models.User, int64, error)
|
|
UpdateStatus(id uint, status int) error
|
|
}
|
|
|
|
type userStorage struct {
|
|
db *gorm.DB
|
|
}
|
|
|
|
// NewUserStorage 创建用户存储实例
|
|
func NewUserStorage() UserStorage {
|
|
return &userStorage{db: DB}
|
|
}
|
|
|
|
// Create 创建用户
|
|
func (s *userStorage) Create(user *models.User) error {
|
|
return s.db.Create(user).Error
|
|
}
|
|
|
|
// GetByID 根据ID获取用户
|
|
func (s *userStorage) GetByID(id uint) (*models.User, error) {
|
|
var user models.User
|
|
err := s.db.First(&user, id).Error
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &user, nil
|
|
}
|
|
|
|
// GetByUsername 根据用户名获取用户
|
|
func (s *userStorage) GetByUsername(username string) (*models.User, error) {
|
|
var user models.User
|
|
err := s.db.Where("username = ?", username).First(&user).Error
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &user, nil
|
|
}
|
|
|
|
// GetByEmail 根据邮箱获取用户
|
|
func (s *userStorage) GetByEmail(email string) (*models.User, error) {
|
|
var user models.User
|
|
err := s.db.Where("email = ?", email).First(&user).Error
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &user, nil
|
|
}
|
|
|
|
// Update 更新用户
|
|
func (s *userStorage) Update(user *models.User) error {
|
|
return s.db.Save(user).Error
|
|
}
|
|
|
|
// Delete 删除用户
|
|
func (s *userStorage) Delete(id uint) error {
|
|
return s.db.Delete(&models.User{}, id).Error
|
|
}
|
|
|
|
// List 获取用户列表
|
|
func (s *userStorage) List(req *models.UserListRequest) ([]models.User, int64, error) {
|
|
var users []models.User
|
|
var total int64
|
|
|
|
query := s.db.Model(&models.User{})
|
|
|
|
// 构建查询条件
|
|
if req.Username != "" {
|
|
query = query.Where("username LIKE ?", "%"+req.Username+"%")
|
|
}
|
|
if req.Email != "" {
|
|
query = query.Where("email LIKE ?", "%"+req.Email+"%")
|
|
}
|
|
if req.Status != nil {
|
|
query = query.Where("status = ?", *req.Status)
|
|
}
|
|
|
|
// 获取总数
|
|
if err := query.Count(&total).Error; err != nil {
|
|
return nil, 0, err
|
|
}
|
|
|
|
// 分页查询
|
|
offset := (req.Page - 1) * req.Size
|
|
err := query.Offset(offset).Limit(req.Size).Find(&users).Error
|
|
|
|
return users, total, err
|
|
}
|
|
|
|
// UpdateStatus 更新用户状态
|
|
func (s *userStorage) UpdateStatus(id uint, status int) error {
|
|
return s.db.Model(&models.User{}).Where("id = ?", id).Update("status", status).Error
|
|
}
|