using System.Threading; using System.Threading.Tasks; using HN.Domain; using MediatR; namespace HN.Application { public sealed class VoteForLinkCommandHandler : IRequestHandler { private readonly ILinkRepository _linkRepository; public VoteForLinkCommandHandler(ILinkRepository linkRepository) { _linkRepository = linkRepository; } public async Task Handle(VoteForLinkCommand request, CancellationToken cancellationToken) { var link = await _linkRepository.GetByIdAsync(request.LinkId); switch (request.Type) { case VoteType.Up: link.Upvote(); break; case VoteType.Down: link.Downvote(); break; } await _linkRepository.UpdateAsync(link); return Unit.Value; } } }