Files
tyapi-server/internal/domains/article/services/article_service.go
2025-09-01 18:29:59 +08:00

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
}