61 lines
1.8 KiB
C#
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());
|
|
}
|
|
}
|
|
} |