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 }