namespace Dpz.Core.Service.Mediator.Features.Video.Commands;

/// <summary>
/// 已过时:请使用 AddCommentCountHandler 和 RabbitMQ 消息队列替代。
/// 原 MediatR 同步处理模式已迁移到异步消息队列,提供更好的性能和可靠性。
/// </summary>
[Obsolete(
    "请使用 Web.Jobs 项目中的 AddCommentCountHandler 替代。MediatR 同步处理已迁移到 RabbitMQ 异步消息队列。",
    false
)]
public class AddCommentCountEvent(
    IRepository<global::Dpz.Core.Public.Entity.Video> repository,
    IRepository<Comment> commentRepository
) : IRequestHandler<AddCommentCountRequest>
{
    /// <summary>
    /// 为视频评论场景回填评论计数。
    /// </summary>
    public async ValueTask<Unit> Handle(
        AddCommentCountRequest request,
        CancellationToken cancellationToken
    )
    {
        if (request.CommentType != CommentNode.Video)
        {
            return Unit.Value;
        }

        var count = await commentRepository
            .SearchFor(x => x.Node == request.CommentType && x.Relation == request.Relation)
            .CountAsync(cancellationToken);
        var update = Builders<Public.Entity.Video>.Update.Set(x => x.CommentCount, count + 1);
        await repository.UpdateAsync(x => x.Id == request.Relation, update, cancellationToken);
        return Unit.Value;
    }
}
评论加载中...