2025-01-13 00:22:12 +08:00
|
|
|
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 实例
|
2025-01-13 16:32:03 +08:00
|
|
|
func NewPostService(repo *repository.PostRepository) *PostService {
|
2025-01-13 00:22:12 +08:00
|
|
|
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 {
|
|
|
|
return s.repo.DeleteByID(id)
|
|
|
|
}
|
|
|
|
|
|
|
|
// UpdatePost 更新文章
|
|
|
|
func (s *PostService) UpdatePost(post domain.Post) error {
|
|
|
|
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
|
|
|
|
}
|