first commit
This commit is contained in:
115
app/blog/services/comment_service.go
Normal file
115
app/blog/services/comment_service.go
Normal file
@@ -0,0 +1,115 @@
|
||||
package services
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"gobeyhan/database"
|
||||
"gobeyhan/database/models"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type CommentService struct{}
|
||||
|
||||
func NewCommentService() *CommentService {
|
||||
return &CommentService{}
|
||||
}
|
||||
|
||||
// GetCommentsByPost retrieves comments for a specific post
|
||||
func (s *CommentService) GetCommentsByPost(postID uint64, activeOnly bool) ([]models.Comment, error) {
|
||||
var comments []models.Comment
|
||||
query := database.DB.
|
||||
Where("product_id = ?", postID).
|
||||
Preload("Parent").
|
||||
Preload("Children")
|
||||
|
||||
if activeOnly {
|
||||
query = query.Where("is_active = ?", true)
|
||||
}
|
||||
|
||||
err := query.Order("created_at DESC").Find(&comments).Error
|
||||
return comments, err
|
||||
}
|
||||
|
||||
// GetAllComments retrieves all comments with pagination
|
||||
func (s *CommentService) GetAllComments(page, limit int, activeOnly bool) ([]models.Comment, int64, error) {
|
||||
var comments []models.Comment
|
||||
var total int64
|
||||
|
||||
query := database.DB.
|
||||
Preload("Product").
|
||||
Preload("Parent").
|
||||
Preload("Children")
|
||||
|
||||
if activeOnly {
|
||||
query = query.Where("is_active = ?", true)
|
||||
}
|
||||
|
||||
query.Model(&models.Comment{}).Count(&total)
|
||||
|
||||
err := query.
|
||||
Offset((page - 1) * limit).
|
||||
Limit(limit).
|
||||
Order("created_at DESC").
|
||||
Find(&comments).Error
|
||||
|
||||
return comments, total, err
|
||||
}
|
||||
|
||||
// GetCommentByID retrieves a comment by ID
|
||||
func (s *CommentService) GetCommentByID(id uint64) (*models.Comment, error) {
|
||||
var comment models.Comment
|
||||
err := database.DB.
|
||||
Preload("Product").
|
||||
Preload("Parent").
|
||||
Preload("Children").
|
||||
First(&comment, id).Error
|
||||
|
||||
if err != nil {
|
||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
return nil, nil
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &comment, nil
|
||||
}
|
||||
|
||||
// CreateComment creates a new comment
|
||||
func (s *CommentService) CreateComment(comment *models.Comment) error {
|
||||
return database.DB.Create(comment).Error
|
||||
}
|
||||
|
||||
// UpdateComment updates an existing comment
|
||||
func (s *CommentService) UpdateComment(id uint64, updates map[string]interface{}) error {
|
||||
result := database.DB.Model(&models.Comment{}).Where("id = ?", id).Updates(updates)
|
||||
if result.Error != nil {
|
||||
return result.Error
|
||||
}
|
||||
if result.RowsAffected == 0 {
|
||||
return gorm.ErrRecordNotFound
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// DeleteComment deletes a comment by ID
|
||||
func (s *CommentService) DeleteComment(id uint64) error {
|
||||
result := database.DB.Delete(&models.Comment{}, id)
|
||||
if result.Error != nil {
|
||||
return result.Error
|
||||
}
|
||||
if result.RowsAffected == 0 {
|
||||
return gorm.ErrRecordNotFound
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetCommentReplies retrieves replies to a specific comment
|
||||
func (s *CommentService) GetCommentReplies(commentID uint64) ([]models.Comment, error) {
|
||||
var replies []models.Comment
|
||||
err := database.DB.
|
||||
Where("parent_id = ? AND is_active = ?", commentID, true).
|
||||
Order("created_at ASC").
|
||||
Find(&replies).Error
|
||||
|
||||
return replies, err
|
||||
}
|
||||
Reference in New Issue
Block a user