package logic import ( "context" "slowwild/internal/constants" "slowwild/internal/errorx" "slowwild/internal/model" "slowwild/internal/svc" "git.banshen.xyz/huangguangrong/slow_wild_protobuff/slowwild/slowwildserver" "github.com/spf13/cast" "github.com/zeromicro/go-zero/core/logx" "gorm.io/gorm" ) type CommentDeleteLogic struct { ctx context.Context svcCtx *svc.ServiceContext logx.Logger } func NewCommentDeleteLogic(ctx context.Context, svcCtx *svc.ServiceContext) *CommentDeleteLogic { return &CommentDeleteLogic{ ctx: ctx, svcCtx: svcCtx, Logger: logx.WithContext(ctx), } } // 删除回复/评论 func (l *CommentDeleteLogic) CommentDelete(in *slowwildserver.CommentDeleteReq) (*slowwildserver.CommentDeleteRsp, error) { userId, err := cast.ToInt64E(l.ctx.Value(constants.UserIDKey)) if err != nil { return nil, errorx.NewCodeError(50001, "用户未登录") } if userId <= 0 || in.CommentId <= 0 { return nil, errorx.ErrInvalidParam } // 开启事务 err = l.svcCtx.UserModel.Transaction(l.ctx, func(tx *gorm.DB) error { postModel := model.NewPostModel(tx, l.svcCtx.Redis) commentModel := model.NewCommentModel(tx, l.svcCtx.Redis) replyModel := model.NewReplyModel(tx, l.svcCtx.Redis) if in.CommentType == 0 { // 删除评论 // 获取评论信息 comment, err := commentModel.GetComment(l.ctx, in.CommentId) if err != nil { return err } // 检查是否是自己的评论 if comment.UserId != userId { return errorx.NewCodeError(20012, "无权删除该评论") } // 删除评论 if err := commentModel.Delete(l.ctx, in.CommentId); err != nil { return err } // 减少帖子评论数(包括评论的回复数) totalCount := comment.ReplyCount + 1 // 评论本身+回复数 if err := postModel.IncrementCommentCount(l.ctx, comment.PostId, int(-totalCount)); err != nil { return err } // 删除评论相关缓存 commentModel.ClearCommentListCache(l.ctx, comment.PostId) } else { // 删除回复 // 获取回复信息 reply, err := replyModel.GetReply(l.ctx, in.CommentId) if err != nil { return err } // 检查是否是自己的回复 if reply.UserId != userId { return errorx.NewCodeError(20012, "无权删除该回复") } // 删除回复 if err := replyModel.Delete(l.ctx, in.CommentId); err != nil { return err } // 减少评论的回复数 if err := commentModel.IncrementReplyCount(l.ctx, reply.CommentId, -1); err != nil { return err } // 减少帖子评论数 if err := postModel.IncrementCommentCount(l.ctx, reply.PostId, -1); err != nil { return err } // 删除回复相关缓存 replyModel.ClearReplyListCache(l.ctx, reply.CommentId) } return nil }) if err != nil { l.Logger.Errorf("删除评论/回复失败: %v", err) return nil, err } return &slowwildserver.CommentDeleteRsp{}, nil }