95 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			95 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package services
 | |
| 
 | |
| import (
 | |
| 	"tyapi-server/internal/domains/article/entities"
 | |
| )
 | |
| 
 | |
| // ArticleService 文章领域服务
 | |
| // 处理文章相关的业务逻辑,包括验证、状态管理等
 | |
| type ArticleService struct{}
 | |
| 
 | |
| // NewArticleService 创建文章领域服务
 | |
| func NewArticleService() *ArticleService {
 | |
| 	return &ArticleService{}
 | |
| }
 | |
| 
 | |
| // ValidateArticle 验证文章
 | |
| // 检查文章是否符合业务规则
 | |
| func (s *ArticleService) ValidateArticle(article *entities.Article) error {
 | |
| 	// 1. 基础验证
 | |
| 	if err := article.Validate(); err != nil {
 | |
| 		return err
 | |
| 	}
 | |
| 	
 | |
| 	// 2. 业务规则验证
 | |
| 	// 标题不能包含敏感词
 | |
| 	if s.containsSensitiveWords(article.Title) {
 | |
| 		return entities.NewValidationError("文章标题包含敏感词")
 | |
| 	}
 | |
| 	
 | |
| 	// 内容不能包含敏感词
 | |
| 	if s.containsSensitiveWords(article.Content) {
 | |
| 		return entities.NewValidationError("文章内容包含敏感词")
 | |
| 	}
 | |
| 	
 | |
| 	// 摘要长度不能超过内容长度
 | |
| 	if article.Summary != "" && len(article.Summary) >= len(article.Content) {
 | |
| 		return entities.NewValidationError("文章摘要不能超过内容长度")
 | |
| 	}
 | |
| 	
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| // CanPublish 检查是否可以发布
 | |
| func (s *ArticleService) CanPublish(article *entities.Article) error {
 | |
| 	if !article.CanPublish() {
 | |
| 		return entities.NewValidationError("文章状态不允许发布")
 | |
| 	}
 | |
| 	
 | |
| 	// 检查必填字段
 | |
| 	if article.Title == "" {
 | |
| 		return entities.NewValidationError("文章标题不能为空")
 | |
| 	}
 | |
| 	if article.Content == "" {
 | |
| 		return entities.NewValidationError("文章内容不能为空")
 | |
| 	}
 | |
| 	
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| // CanEdit 检查是否可以编辑
 | |
| func (s *ArticleService) CanEdit(article *entities.Article) error {
 | |
| 	if !article.CanEdit() {
 | |
| 		return entities.NewValidationError("文章状态不允许编辑")
 | |
| 	}
 | |
| 	
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| // containsSensitiveWords 检查是否包含敏感词
 | |
| func (s *ArticleService) containsSensitiveWords(text string) bool {
 | |
| 	// TODO: 实现敏感词检查逻辑
 | |
| 	// 这里可以集成敏感词库或调用外部服务
 | |
| 	sensitiveWords := []string{
 | |
| 		"敏感词1",
 | |
| 		"敏感词2",
 | |
| 		"敏感词3",
 | |
| 	}
 | |
| 	
 | |
| 	for _, word := range sensitiveWords {
 | |
| 		if len(word) > 0 && len(text) > 0 {
 | |
| 			// 简单的字符串包含检查
 | |
| 			// 实际项目中应该使用更复杂的算法
 | |
| 			if len(text) >= len(word) {
 | |
| 				for i := 0; i <= len(text)-len(word); i++ {
 | |
| 					if text[i:i+len(word)] == word {
 | |
| 						return true
 | |
| 					}
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 	
 | |
| 	return false
 | |
| }
 |