hn-dotnet/Application/ListLinks/ListLinksQueryHandler.cs

61 lines
1.8 KiB
C#

using System.Threading;
using System.Linq;
using System.Threading.Tasks;
using MediatR;
using HN.Domain;
namespace HN.Application
{
// public static class LinkQueriesExtensions
// {
// public static IQueryable<LinkDto> AllAsDto(this DbSet<Link> links)
// {
// return from link in links
// select new LinkDto
// {
// Id = link.Id,
// Url = link.Url,
// CreatedAt = link.CreatedAt,
// UpVotes = link.Votes.Count(v => v.Type == VoteType.Up),
// DownVotes = link.Votes.Count(v => v.Type == VoteType.Down)
// };
// }
// public static IQueryable<LinkDto> ToLinkDto(this IQueryable<Link> links)
// {
// return links.Select(link => new LinkDto
// {
// Id = link.Id,
// Url = link.Url,
// CreatedAt = link.CreatedAt,
// UpVotes = link.Votes.Count(v => v.Type == VoteType.Up),
// DownVotes = link.Votes.Count(v => v.Type == VoteType.Down)
// });
// }
// }
public sealed class ListLinksQueryHandler : IRequestHandler<ListLinksQuery, LinkDto[]>
{
private readonly IHNContext _context;
public ListLinksQueryHandler(IHNContext context)
{
_context = context;
}
public Task<LinkDto[]> Handle(ListLinksQuery request, CancellationToken cancellationToken)
{
var links = from link in _context.Links
select new LinkDto
{
Id = link.Id,
Url = link.Url,
CreatedAt = link.CreatedAt,
UpVotes = link.Votes.Count(v => v.Type == VoteType.Up),
DownVotes = link.Votes.Count(v => v.Type == VoteType.Down)
};
return Task.FromResult(links.OrderByDescending(l => l.CreatedAt).ToArray());
}
}
}