177 lines
5.1 KiB
Go
177 lines
5.1 KiB
Go
package service
|
|
|
|
import (
|
|
dao "assets/dao/asset"
|
|
dto "assets/model/dto/asset"
|
|
"context"
|
|
|
|
"github.com/gogf/gf/v2/errors/gerror"
|
|
"go.mongodb.org/mongo-driver/v2/bson"
|
|
)
|
|
|
|
type privateCategory struct{}
|
|
|
|
// PrivateCategory 私域分类服务
|
|
var PrivateCategory = new(privateCategory)
|
|
|
|
// CreatePrivateCategory 创建私域分类
|
|
func (s *privateCategory) CreatePrivateCategory(ctx context.Context, req *dto.CreatePrivateCategoryReq) (*dto.CreatePrivateCategoryRes, error) {
|
|
// 自动设置level
|
|
if !req.ParentID.IsZero() {
|
|
parentCategory, err := dao.PrivateCategory.GetOne(ctx, req.ParentID)
|
|
if err == nil && parentCategory != nil {
|
|
req.Level = parentCategory.Level + 1
|
|
req.Path = parentCategory.Path + "/" + parentCategory.Id.Hex()
|
|
}
|
|
} else {
|
|
req.Level = 0
|
|
req.Path = "/root"
|
|
}
|
|
|
|
// 保存到数据库
|
|
ids, err := dao.PrivateCategory.Insert(ctx, req)
|
|
if err != nil {
|
|
return nil, gerror.Wrap(err, "创建私域分类失败")
|
|
}
|
|
|
|
var id *bson.ObjectID
|
|
if len(ids) > 0 {
|
|
if objectID, ok := ids[0].(bson.ObjectID); ok {
|
|
id = &objectID
|
|
}
|
|
}
|
|
|
|
return &dto.CreatePrivateCategoryRes{ID: id}, nil
|
|
}
|
|
|
|
// BatchCreatePrivateCategory 批量创建私域分类
|
|
func (s *privateCategory) BatchCreatePrivateCategory(ctx context.Context, req *dto.BatchCreatePrivateCategoryReq) (*dto.BatchCreatePrivateCategoryRes, error) {
|
|
// 保存到数据库
|
|
ids, err := dao.PrivateCategory.BatchInsert(ctx, req)
|
|
if err != nil {
|
|
return nil, gerror.Wrap(err, "批量创建私域分类失败")
|
|
}
|
|
|
|
// 转换ID列表
|
|
idList := make([]*bson.ObjectID, 0, len(ids))
|
|
for _, id := range ids {
|
|
if objectID, ok := id.(bson.ObjectID); ok {
|
|
idList = append(idList, &objectID)
|
|
}
|
|
}
|
|
|
|
return &dto.BatchCreatePrivateCategoryRes{IDs: idList}, nil
|
|
}
|
|
|
|
// UpdatePrivateCategory 更新私域分类
|
|
func (s *privateCategory) UpdatePrivateCategory(ctx context.Context, req *dto.UpdatePrivateCategoryReq) error {
|
|
// 更新到数据库
|
|
err := dao.PrivateCategory.Update(ctx, req)
|
|
if err != nil {
|
|
return gerror.Wrap(err, "更新私域分类失败")
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// DeletePrivateCategory 删除私域分类
|
|
func (s *privateCategory) DeletePrivateCategory(ctx context.Context, id *bson.ObjectID) error {
|
|
return dao.PrivateCategory.DeleteFake(ctx, id)
|
|
}
|
|
|
|
// GetPrivateCategory 获取私域分类详情
|
|
func (s *privateCategory) GetPrivateCategory(ctx context.Context, id *bson.ObjectID) (*dto.GetPrivateCategoryRes, error) {
|
|
category, err := dao.PrivateCategory.GetOne(ctx, id)
|
|
if err != nil {
|
|
return nil, gerror.Wrap(err, "获取私域分类失败")
|
|
}
|
|
|
|
// 转换为响应
|
|
res := &dto.GetPrivateCategoryRes{
|
|
ID: category.Id,
|
|
Name: category.Name,
|
|
ParentID: category.ParentID,
|
|
Path: category.Path,
|
|
Level: category.Level,
|
|
IsLeafNode: category.IsLeafNode,
|
|
Sort: category.Sort,
|
|
Image: category.Image,
|
|
CreatedAt: category.CreatedAt.Format("2006-01-02 15:04:05"),
|
|
UpdatedAt: category.UpdatedAt.Format("2006-01-02 15:04:05"),
|
|
}
|
|
|
|
return res, nil
|
|
}
|
|
|
|
// ListPrivateCategory 获取私域分类列表
|
|
func (s *privateCategory) ListPrivateCategory(ctx context.Context, req *dto.ListPrivateCategoryReq) (*dto.ListPrivateCategoryRes, error) {
|
|
// 获取数据
|
|
categories, total, err := dao.PrivateCategory.List(ctx, req)
|
|
if err != nil {
|
|
return nil, gerror.Wrap(err, "获取私域分类列表失败")
|
|
}
|
|
|
|
// 转换为响应
|
|
listItems := make([]*dto.PrivateCategoryListItem, 0, len(categories))
|
|
for _, category := range categories {
|
|
listItems = append(listItems, &dto.PrivateCategoryListItem{
|
|
ID: category.Id,
|
|
Name: category.Name,
|
|
ParentID: category.ParentID,
|
|
Path: category.Path,
|
|
Level: category.Level,
|
|
IsLeafNode: category.IsLeafNode,
|
|
Sort: category.Sort,
|
|
Image: category.Image,
|
|
CreatedAt: category.CreatedAt.Format("2006-01-02 15:04:05"),
|
|
UpdatedAt: category.UpdatedAt.Format("2006-01-02 15:04:05"),
|
|
})
|
|
}
|
|
|
|
return &dto.ListPrivateCategoryRes{
|
|
List: listItems,
|
|
Total: total,
|
|
}, nil
|
|
}
|
|
|
|
// GetPrivateCategoryTree 获取私域分类树
|
|
func (s *privateCategory) GetPrivateCategoryTree(ctx context.Context) (*dto.GetPrivateCategoryTreeRes, error) {
|
|
categories, err := dao.PrivateCategory.GetTree(ctx)
|
|
if err != nil {
|
|
return nil, gerror.Wrap(err, "获取私域分类树失败")
|
|
}
|
|
|
|
// 转换为响应
|
|
treeItems := make([]*dto.PrivateCategoryTreeItem, 0, len(categories))
|
|
for _, category := range categories {
|
|
treeItems = append(treeItems, &dto.PrivateCategoryTreeItem{
|
|
ID: category.Id,
|
|
Name: category.Name,
|
|
ParentID: category.ParentID,
|
|
Path: category.Path,
|
|
Level: category.Level,
|
|
IsLeafNode: category.IsLeafNode,
|
|
Sort: category.Sort,
|
|
Image: category.Image,
|
|
})
|
|
}
|
|
|
|
return &dto.GetPrivateCategoryTreeRes{
|
|
Tree: treeItems,
|
|
}, nil
|
|
}
|
|
|
|
// GenerateTestData 生成测试数据
|
|
func (s *privateCategory) GenerateTestData(ctx context.Context) error {
|
|
testData := &dto.BatchCreatePrivateCategoryReq{
|
|
Categories: []dto.CreatePrivateCategoryReq{},
|
|
}
|
|
|
|
_, err := s.BatchCreatePrivateCategory(ctx, testData)
|
|
if err != nil {
|
|
return gerror.Wrap(err, "生成测试数据失败")
|
|
}
|
|
|
|
return nil
|
|
}
|