Files
GoFilm/server/model/system/Categories.go
2026-03-30 21:47:26 +08:00

81 lines
1.9 KiB
Go

package system
import (
"encoding/json"
"log"
"server/config"
"server/plugin/db"
)
// Category 分类信息
type Category struct {
Id int64 `json:"id"` // 分类ID
Pid int64 `json:"pid"` // 父级分类ID
Name string `json:"name"` // 分类名称
Show bool `json:"show"` // 是否展示
}
// CategoryTree 分类信息树形结构
type CategoryTree struct {
*Category
Children []*CategoryTree `json:"children"` // 子分类信息
}
// 影视分类展示树形结构
// SaveCategoryTree 保存影片分类信息
func SaveCategoryTree(tree *CategoryTree) error {
data, _ := json.Marshal(tree)
return db.Rdb.Set(db.Cxt, config.CategoryTreeKey, data, config.FilmExpired).Err()
}
// GetCategoryTree 获取影片分类信息
func GetCategoryTree() CategoryTree {
data := db.Rdb.Get(db.Cxt, config.CategoryTreeKey).Val()
tree := CategoryTree{}
_ = json.Unmarshal([]byte(data), &tree)
return tree
}
// ExistsCategoryTree 查询分类信息是否存在
func ExistsCategoryTree() bool {
exists, err := db.Rdb.Exists(db.Cxt, config.CategoryTreeKey).Result()
if err != nil {
log.Println("ExistsCategoryTree Error", err)
}
return exists == 1
}
// GetChildrenTree 根据影片Id获取对应分类的子分类信息
func GetChildrenTree(id int64) []*CategoryTree {
tree := GetCategoryTree()
for _, t := range tree.Children {
if t.Id == id {
return t.Children
}
}
return nil
}
// GetRevealCategoryList 获取show=true的二级分类信息
func GetRevealCategoryList() []*CategoryTree {
// 初始化分类信息切片
var cl []*CategoryTree
var tree CategoryTree
// 从redis获取分类信息树
data := db.Rdb.Get(db.Cxt, config.CategoryTreeKey).Val()
_ = json.Unmarshal([]byte(data), &tree)
// 迭代分类树信息, 将show=true的二级分类信息添加到cl切片中
for _, t := range tree.Children {
if t.Show {
for _, c := range t.Children {
if c.Show {
cl = append(cl, c)
}
}
}
}
return cl
}