feat: 个人中心发布
This commit is contained in:
+104
-7
@@ -62,11 +62,6 @@ func (s *PostService) PostPage(req plantReq.PostPage, userId string) (list inter
|
||||
Preload("Publisher", func(db *gorm.DB) *gorm.DB {
|
||||
return db.Preload("Avatar")
|
||||
}).
|
||||
Preload("LikeList", func(db *gorm.DB) *gorm.DB {
|
||||
return db.Preload("Liker", func(db *gorm.DB) *gorm.DB {
|
||||
return db.Preload("Avatar")
|
||||
})
|
||||
}).
|
||||
Preload("CommentList", func(db *gorm.DB) *gorm.DB {
|
||||
return db.Preload("Commentator", func(db *gorm.DB) *gorm.DB {
|
||||
return db.Preload("Avatar")
|
||||
@@ -96,11 +91,21 @@ func (s *PostService) PostPage(req plantReq.PostPage, userId string) (list inter
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
//批量查询当前用户的收藏
|
||||
var stars []*plant.UserStar
|
||||
err = global.DB.Where("user_id = ? and post_id in ?", userId, postIds).Find(&stars).Error
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
// 构建id映射
|
||||
likesMap := make(map[string]bool)
|
||||
for _, v := range postLikeList {
|
||||
likesMap[v.PostId] = true
|
||||
}
|
||||
starsMap := make(map[string]bool)
|
||||
for _, v := range stars {
|
||||
starsMap[v.PostId] = true
|
||||
}
|
||||
// 是否点赞
|
||||
for i := range posts {
|
||||
if likesMap[posts[i].Id] {
|
||||
@@ -109,6 +114,11 @@ func (s *PostService) PostPage(req plantReq.PostPage, userId string) (list inter
|
||||
posts[i].HasLiked = 0
|
||||
}
|
||||
|
||||
if starsMap[posts[i].Id] {
|
||||
posts[i].HasStar = 1
|
||||
} else {
|
||||
posts[i].HasStar = 0
|
||||
}
|
||||
}
|
||||
|
||||
return posts, total, err
|
||||
@@ -169,7 +179,6 @@ func (s *PostService) MyPost(req plantReq.PostPage, userId string) (list interfa
|
||||
} else {
|
||||
posts[i].HasLiked = 0
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return posts, total, err
|
||||
@@ -210,7 +219,9 @@ func (s *PostService) LikePost(userId, postId, class string) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = tx.Model(&post).Update("like_count", post.LikeCount-1).Error
|
||||
err = tx.Model(&post).
|
||||
Where("like_count > 0"). // 只有大于 0 才会执行减法
|
||||
Update("like_count", post.LikeCount-1).Error
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -244,3 +255,89 @@ func (s *PostService) CommentPost(req plantReq.CreateComment, userId string) err
|
||||
return tx.Create(&comment).Error
|
||||
})
|
||||
}
|
||||
|
||||
// DeletePost 删除帖子
|
||||
func (s *PostService) DeletePost(ids []string) error {
|
||||
return global.DB.Transaction(func(tx *gorm.DB) error {
|
||||
var imgIds []string
|
||||
tx.Table("sundynix_post_oss").Where("post_id IN ?", ids).Pluck("oss_id", &imgIds)
|
||||
|
||||
// 2. 清理中间表记录 (解开多对多关系)
|
||||
// 使用 Exec 直接操作中间表比循环 Clear 快得多
|
||||
if err := tx.Exec("DELETE FROM sundynix_post_oss WHERE post_id IN ?", ids).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 3. 物理删除图片记录本身
|
||||
if len(imgIds) > 0 {
|
||||
if err := tx.Unscoped().Where("id IN ?", imgIds).Delete(&system.Oss{}).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
// 4. 批量删除点赞 (PostLike)
|
||||
if err := tx.Unscoped().Where("post_id IN ?", ids).Delete(&plant.PostLike{}).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
// 5. 批量删除评论 (PostComment)
|
||||
if err := tx.Unscoped().Where("post_id IN ?", ids).Delete(&plant.PostComment{}).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 6. 最后删除主表 Post
|
||||
if err := tx.Unscoped().Where("id IN ?", ids).Delete(&plant.Post{}).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
// StarPost 收藏帖子
|
||||
func (s *PostService) StarPost(userId string, postId string, class string) error {
|
||||
if class == "1" {
|
||||
return global.DB.Transaction(func(tx *gorm.DB) error {
|
||||
var post plant.Post
|
||||
err := tx.Where("id = ?", postId).First(&post).Error
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
//1.更新点赞数
|
||||
err = tx.Model(&post).Update("star_count", post.LikeCount+1).Error
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
//2.添加到我的收藏
|
||||
star := plant.UserStar{
|
||||
UserId: userId,
|
||||
Type: 2,
|
||||
PostId: postId,
|
||||
}
|
||||
return tx.Create(&star).Error
|
||||
})
|
||||
} else if class == "2" {
|
||||
return global.DB.Transaction(func(tx *gorm.DB) error {
|
||||
var star plant.UserStar
|
||||
err := tx.Where("post_id = ? and user_id = ?", postId, userId).First(&star).Error
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
//1.更新收藏数
|
||||
var post plant.Post
|
||||
err = tx.Where("id = ?", postId).First(&post).Error
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = tx.Model(&post).
|
||||
Where("star_count > ?", 0). // 只有大于 0 才会执行减法
|
||||
Update("star_count", gorm.Expr("star_count - 1")).
|
||||
Error
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
//2.删除收藏
|
||||
return tx.Unscoped().Delete(&star).Error
|
||||
})
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user