feat: 分类系统 + 标签系统 — Phase 4 完成
分类:Model/Repo/Service/Controller + 管理后台树形页面 + 首页导航栏
标签:Model/Repo/Service/Controller + /tags/{slug} 落地页 + 写文章页输入
Post 加 CategoryID,Create/Update 支持分类和标签
SQL 迁移含 categories/tags/post_tags 表及预设未分类
This commit is contained in:
63
internal/repository/category_repo.go
Normal file
63
internal/repository/category_repo.go
Normal file
@ -0,0 +1,63 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"metazone.cc/mce/internal/model"
|
||||
"metazone.cc/mce/internal/service"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
// CategoryRepo 分类数据访问
|
||||
type CategoryRepo struct {
|
||||
db *gorm.DB
|
||||
}
|
||||
|
||||
// NewCategoryRepo 构造函数
|
||||
func NewCategoryRepo(db *gorm.DB) *CategoryRepo {
|
||||
return &CategoryRepo{db: db}
|
||||
}
|
||||
|
||||
// WithTx 基于事务创建新实例
|
||||
func (r *CategoryRepo) WithTx(tx *gorm.DB) service.CategoryStore {
|
||||
return &CategoryRepo{db: tx}
|
||||
}
|
||||
|
||||
// Create 创建分类
|
||||
func (r *CategoryRepo) Create(c *model.Category) error {
|
||||
return r.db.Create(c).Error
|
||||
}
|
||||
|
||||
// Update 更新分类
|
||||
func (r *CategoryRepo) Update(c *model.Category) error {
|
||||
return r.db.Save(c).Error
|
||||
}
|
||||
|
||||
// Delete 删除分类
|
||||
func (r *CategoryRepo) Delete(id uint) error {
|
||||
return r.db.Delete(&model.Category{}, id).Error
|
||||
}
|
||||
|
||||
// FindByID 按 ID 查询
|
||||
func (r *CategoryRepo) FindByID(id uint) (*model.Category, error) {
|
||||
var c model.Category
|
||||
err := r.db.First(&c, id).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &c, nil
|
||||
}
|
||||
|
||||
// ListAll 查询全部分类(按 sort 排序)
|
||||
func (r *CategoryRepo) ListAll() ([]model.Category, error) {
|
||||
var list []model.Category
|
||||
err := r.db.Order("sort ASC, id ASC").Find(&list).Error
|
||||
return list, err
|
||||
}
|
||||
|
||||
// GetLeaves 查询所有叶子分类(有子分类的父节点不返回)
|
||||
func (r *CategoryRepo) GetLeaves() ([]model.Category, error) {
|
||||
var leaves []model.Category
|
||||
err := r.db.Where("id NOT IN (SELECT DISTINCT parent_id FROM categories WHERE parent_id IS NOT NULL)").
|
||||
Order("sort ASC, id ASC").Find(&leaves).Error
|
||||
return leaves, err
|
||||
}
|
||||
Reference in New Issue
Block a user