102 lines
2.4 KiB
Go
102 lines
2.4 KiB
Go
package storage
|
|
|
|
import (
|
|
"goalfymax-admin/internal/models"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
// PageStorage 页面存储接口
|
|
type PageStorage interface {
|
|
Create(page *models.Page) error
|
|
GetByID(id uint) (*models.Page, error)
|
|
GetByPath(path string) (*models.Page, error)
|
|
Update(page *models.Page) error
|
|
Delete(id uint) error
|
|
List(req *models.PageListRequest) ([]models.Page, int64, error)
|
|
}
|
|
|
|
type pageStorage struct {
|
|
db *gorm.DB
|
|
}
|
|
|
|
// NewPageStorage 创建页面存储实例
|
|
func NewPageStorage() PageStorage {
|
|
return &pageStorage{
|
|
db: DB,
|
|
}
|
|
}
|
|
|
|
// Create 创建页面
|
|
func (s *pageStorage) Create(page *models.Page) error {
|
|
return s.db.Create(page).Error
|
|
}
|
|
|
|
// GetByID 根据ID获取页面
|
|
func (s *pageStorage) GetByID(id uint) (*models.Page, error) {
|
|
var page models.Page
|
|
err := s.db.Where("id = ? AND deleted_at IS NULL", id).First(&page).Error
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &page, nil
|
|
}
|
|
|
|
// GetByPath 根据路径获取页面
|
|
func (s *pageStorage) GetByPath(path string) (*models.Page, error) {
|
|
var page models.Page
|
|
err := s.db.Where("path = ? AND deleted_at IS NULL", path).First(&page).Error
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &page, nil
|
|
}
|
|
|
|
// Update 更新页面
|
|
func (s *pageStorage) Update(page *models.Page) error {
|
|
return s.db.Save(page).Error
|
|
}
|
|
|
|
// Delete 删除页面
|
|
func (s *pageStorage) Delete(id uint) error {
|
|
return s.db.Where("id = ?", id).Delete(&models.Page{}).Error
|
|
}
|
|
|
|
// List 获取页面列表
|
|
func (s *pageStorage) List(req *models.PageListRequest) ([]models.Page, int64, error) {
|
|
var pages []models.Page
|
|
var total int64
|
|
|
|
query := s.db.Model(&models.Page{}).Where("deleted_at IS NULL")
|
|
|
|
// 应用过滤条件
|
|
if req.Name != "" {
|
|
query = query.Where("name LIKE ?", "%"+req.Name+"%")
|
|
}
|
|
if req.Path != "" {
|
|
query = query.Where("path LIKE ?", "%"+req.Path+"%")
|
|
}
|
|
if req.IsActive != nil {
|
|
query = query.Where("is_active = ?", *req.IsActive)
|
|
}
|
|
|
|
// 获取总数
|
|
err := query.Count(&total).Error
|
|
if err != nil {
|
|
return nil, 0, err
|
|
}
|
|
|
|
// 应用分页(如果没有指定分页参数,返回所有数据)
|
|
if req.Page > 0 && req.Size > 0 {
|
|
offset := (req.Page - 1) * req.Size
|
|
err = query.Order("sort_order ASC, id ASC").Offset(offset).Limit(req.Size).Find(&pages).Error
|
|
} else {
|
|
// 不分页,返回所有数据
|
|
err = query.Order("sort_order ASC, id ASC").Find(&pages).Error
|
|
}
|
|
if err != nil {
|
|
return nil, 0, err
|
|
}
|
|
|
|
return pages, total, nil
|
|
}
|