feat():learning后台管理项目初始化
This commit is contained in:
101
internal/storage/page_storage.go
Normal file
101
internal/storage/page_storage.go
Normal file
@@ -0,0 +1,101 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user