lv8girl!
This commit is contained in:
92
internal/services/discussion.go
Normal file
92
internal/services/discussion.go
Normal file
@@ -0,0 +1,92 @@
|
||||
package services
|
||||
|
||||
import (
|
||||
"lv8girl/internal/models"
|
||||
"lv8girl/internal/repositories"
|
||||
)
|
||||
|
||||
type DiscussionService struct {
|
||||
discussionRepo *repositories.DiscussionRepository
|
||||
likeRepo *repositories.LikeRepository
|
||||
commentRepo *repositories.CommentRepository
|
||||
}
|
||||
|
||||
func NewDiscussionService() *DiscussionService {
|
||||
return &DiscussionService{
|
||||
discussionRepo: repositories.NewDiscussionRepository(),
|
||||
likeRepo: repositories.NewLikeRepository(),
|
||||
commentRepo: repositories.NewCommentRepository(),
|
||||
}
|
||||
}
|
||||
|
||||
type PostDetailView struct {
|
||||
Post *models.Discussion
|
||||
LikeCount int64
|
||||
CommentCount int64
|
||||
UserLiked bool
|
||||
AuthorPostCount int64
|
||||
}
|
||||
|
||||
func (s *DiscussionService) GetPostDetail(postID, userID uint) (*PostDetailView, error) {
|
||||
post, err := s.discussionRepo.FindByID(postID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
likeCount, _ := s.likeRepo.CountByPostID(postID)
|
||||
commentCount, _ := s.commentRepo.CountByPostID(postID)
|
||||
userLiked := s.likeRepo.Exists(postID, userID)
|
||||
authorPostCount, _ := s.discussionRepo.CountByUserID(post.UserID)
|
||||
|
||||
return &PostDetailView{
|
||||
Post: post,
|
||||
LikeCount: likeCount,
|
||||
CommentCount: commentCount,
|
||||
UserLiked: userLiked,
|
||||
AuthorPostCount: authorPostCount,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *DiscussionService) IncrementViews(postID uint) error {
|
||||
return s.discussionRepo.IncrementViews(postID)
|
||||
}
|
||||
|
||||
func (s *DiscussionService) AddLike(postID, userID uint) error {
|
||||
if s.likeRepo.Exists(postID, userID) {
|
||||
return nil
|
||||
}
|
||||
|
||||
like := &models.Like{
|
||||
PostID: postID,
|
||||
UserID: userID,
|
||||
}
|
||||
return s.likeRepo.Create(like)
|
||||
}
|
||||
|
||||
func (s *DiscussionService) AddComment(postID, userID uint, content string) error {
|
||||
comment := &models.Comment{
|
||||
PostID: postID,
|
||||
UserID: userID,
|
||||
Content: content,
|
||||
}
|
||||
return s.commentRepo.Create(comment)
|
||||
}
|
||||
|
||||
func (s *DiscussionService) GetComments(postID uint) ([]models.Comment, error) {
|
||||
return s.commentRepo.FindByPostID(postID)
|
||||
}
|
||||
|
||||
func (s *DiscussionService) CreatePost(userID uint, title, content, imagePath string) error {
|
||||
post := &models.Discussion{
|
||||
UserID: userID,
|
||||
Title: title,
|
||||
Content: content,
|
||||
ImagePath: imagePath,
|
||||
Status: "pending",
|
||||
}
|
||||
return s.discussionRepo.Create(post)
|
||||
}
|
||||
|
||||
func (s *DiscussionService) GetApprovedPosts(limit int) ([]repositories.PostListItem, error) {
|
||||
return s.discussionRepo.GetPostList(limit)
|
||||
}
|
||||
Reference in New Issue
Block a user