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 | ||
|  | } |