package common import ( "errors" "git.echol.cn/loser/Go-Web-Template/server/global" "git.echol.cn/loser/Go-Web-Template/server/model/common" "gorm.io/gorm" ) type AttachmentCategoryService struct{} // AddCategory 创建/更新的分类 func (a *AttachmentCategoryService) AddCategory(req *common.ExaAttachmentCategory) (err error) { // 检查是否已存在相同名称的分类 if (!errors.Is(global.GVA_DB.Take(&common.ExaAttachmentCategory{}, "name = ? and pid = ?", req.Name, req.Pid).Error, gorm.ErrRecordNotFound)) { return errors.New("分类名称已存在") } if req.ID > 0 { if err = global.GVA_DB.Model(&common.ExaAttachmentCategory{}).Where("id = ?", req.ID).Updates(&common.ExaAttachmentCategory{ Name: req.Name, Pid: req.Pid, }).Error; err != nil { return err } } else { if err = global.GVA_DB.Create(&common.ExaAttachmentCategory{ Name: req.Name, Pid: req.Pid, }).Error; err != nil { return err } } return nil } // DeleteCategory 删除分类 func (a *AttachmentCategoryService) DeleteCategory(id *int) error { var childCount int64 global.GVA_DB.Model(&common.ExaAttachmentCategory{}).Where("pid = ?", id).Count(&childCount) if childCount > 0 { return errors.New("请先删除子级") } return global.GVA_DB.Where("id = ?", id).Unscoped().Delete(&common.ExaAttachmentCategory{}).Error } // GetCategoryList 分类列表 func (a *AttachmentCategoryService) GetCategoryList() (res []*common.ExaAttachmentCategory, err error) { var fileLists []common.ExaAttachmentCategory err = global.GVA_DB.Model(&common.ExaAttachmentCategory{}).Find(&fileLists).Error if err != nil { return res, err } return a.getChildrenList(fileLists, 0), nil } // getChildrenList 子类 func (a *AttachmentCategoryService) getChildrenList(categories []common.ExaAttachmentCategory, parentID uint) []*common.ExaAttachmentCategory { var tree []*common.ExaAttachmentCategory for _, category := range categories { if category.Pid == parentID { category.Children = a.getChildrenList(categories, category.ID) tree = append(tree, &category) } } return tree }