package service import ( "errors" "go_redis_learn2/domain" "go_redis_learn2/internal/repository" ) // IPostService 定义文章服务的业务接口 type IPostService interface { CreatePost(post domain.Post) error DeletePost(id uint) error UpdatePost(post domain.Post) error GetAllPosts() ([]domain.Post, error) } // PostService 实现 IPostService 接口 type PostService struct { repo *repository.PostRepository } var _ IPostService = (*PostService)(nil) // NewPostService 创建 PostService 实例 func NewPostService(repo *repository.PostRepository) IPostService { return &PostService{ repo: repo, } } // CreatePost 创建新文章 func (s *PostService) CreatePost(post domain.Post) error { if err := s.validatePost(post); err != nil { return err } return s.repo.Create(post) } // DeletePost 根据ID删除文章 func (s *PostService) DeletePost(id uint) error { if id == 0 { return errors.New("invalid post id") } return s.repo.DeleteByID(id) } // UpdatePost 更新文章 func (s *PostService) UpdatePost(post domain.Post) error { if post.ID == 0 { return errors.New("invalid post id") } if err := s.validatePost(post); err != nil { return err } return s.repo.Update(post) } // GetAllPosts 获取所有文章 func (s *PostService) GetAllPosts() ([]domain.Post, error) { return s.repo.FindAll() } // validatePost 验证文章数据 func (s *PostService) validatePost(post domain.Post) error { if post.Title == "" { return errors.New("标题不能为空") } if len(post.Title) > 100 { return errors.New("标题长度不能超过100个字符") } if post.Text == "" { return errors.New("文章内容不能为空") } return nil }