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 }