myhn/Application/GetLinkById/GetLinkByIdQueryHandler.cs
2021-01-08 16:26:19 +01:00

54 lines
1.7 KiB
C#

using System;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using MediatR;
using MyHN.Domain;
namespace MyHN.Application
{
public class GetLinkByIdQueryHandler : IRequestHandler<GetLinkByIdQuery, LinkDto>
{
private readonly IContext _context;
public GetLinkByIdQueryHandler(IContext context)
{
_context = context;
}
public Task<LinkDto> Handle(GetLinkByIdQuery request, CancellationToken cancellationToken)
{
// var result = from link in _context.Links
// join user in _context.Users on link.CreatedBy equals user.Id
// where link.Id == request.Id
// select new LinkDto
// {
// Id = link.Id,
// Url = link.Url,
// CreatedAt = link.CreatedAt,
// CreatedByName = user.UserName,
// UpvotesCount = link.Votes.Count(v => v.Direction == VoteType.Up),
// DownvotesCount = link.Votes.Count(v => v.Direction == VoteType.Down)
// };
// return Task.FromResult(result.Single());
var result = _context.Links
.Where(o => o.Id == request.Id)
.Join(_context.Users,
link => link.CreatedBy,
user => user.Id,
(link, user) => new LinkDto
{
Id = link.Id,
Url = link.Url,
CreatedAt = link.CreatedAt,
CreatedByName = user.UserName,
UpvotesCount = link.Votes.Count(v => v.Direction == VoteType.Up),
DownvotesCount = link.Votes.Count(v => v.Direction == VoteType.Down)
});
return Task.FromResult(result.Single());
}
}
}