From 903c568d1ba2cbf55c95be89d9ece41bf0996287 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sat, 29 Aug 2020 15:45:43 -0500 Subject: [PATCH] =?UTF-8?q?refactor(directory):=20=E2=99=BB=20break=20off?= =?UTF-8?q?=20a=20list=20details=20endpoint?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/ListsController.cs | 6 + .../Queries/GetListDetails.cs | 132 ++++++++++++++++++ .../Queries/GetLists.cs | 54 +------ 3 files changed, 139 insertions(+), 53 deletions(-) create mode 100644 services/directory/src/FilterLists.Directory.Application/Queries/GetListDetails.cs diff --git a/services/directory/src/FilterLists.Directory.Api/Controllers/ListsController.cs b/services/directory/src/FilterLists.Directory.Api/Controllers/ListsController.cs index 2f7db4e2d..8e29a634d 100644 --- a/services/directory/src/FilterLists.Directory.Api/Controllers/ListsController.cs +++ b/services/directory/src/FilterLists.Directory.Api/Controllers/ListsController.cs @@ -22,5 +22,11 @@ public async Task Get(CancellationToken cancellationToken) { return Ok(await _mediator.Send(new GetLists.Query(), cancellationToken)); } + + [HttpGet("{id}")] + public async Task GetDetails(int id, CancellationToken cancellationToken) + { + return Ok(await _mediator.Send(new GetListDetails.Query(id), cancellationToken)); + } } } \ No newline at end of file diff --git a/services/directory/src/FilterLists.Directory.Application/Queries/GetListDetails.cs b/services/directory/src/FilterLists.Directory.Application/Queries/GetListDetails.cs new file mode 100644 index 000000000..909611942 --- /dev/null +++ b/services/directory/src/FilterLists.Directory.Application/Queries/GetListDetails.cs @@ -0,0 +1,132 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using AutoMapper; +using AutoMapper.QueryableExtensions; +using FilterLists.Directory.Infrastructure.Persistence.Queries.Context; +using FilterLists.Directory.Infrastructure.Persistence.Queries.Entities; +using MediatR; +using Microsoft.EntityFrameworkCore; + +namespace FilterLists.Directory.Application.Queries +{ + public static class GetListDetails + { + public class Query : IRequest + { + public Query(int id) + { + Id = id; + } + + public int Id { get; } + } + + public class Handler : IRequestHandler + { + private readonly IQueryContext _context; + private readonly IMapper _mapper; + + public Handler(IQueryContext context, IMapper mapper) + { + _context = context; + _mapper = mapper; + } + + public async Task Handle( + Query request, + CancellationToken cancellationToken) + { + return await _context.FilterLists + .ProjectTo(_mapper.ConfigurationProvider) + .SingleOrDefaultAsync(fl => fl.Id == request.Id, cancellationToken); + } + } + + public class ListViewModelProfile : Profile + { + public ListViewModelProfile() + { + CreateMap() + .ForMember(fl => fl.SyntaxIds, + o => o.MapFrom(fl => + fl.FilterListSyntaxes.Select(fls => fls.SyntaxId).OrderBy(sid => sid))) + .ForMember(fl => fl.LanguageIso6391s, + o => o.MapFrom(fl => + fl.FilterListLanguages.Select(fls => fls.Iso6391).OrderBy(i => i))) + .ForMember(fl => fl.TagIds, + o => o.MapFrom(fl => + fl.FilterListTags.Select(flt => flt.TagId).OrderBy(tid => tid))) + .ForMember(fl => fl.ViewUrls, + o => o.MapFrom(fl => + fl.ViewUrls.OrderBy(u => u.SegmentNumber).ThenBy(u => u.Primariness))) + .ForMember(fl => fl.MaintainerIds, + o => o.MapFrom(fl => + fl.FilterListMaintainers.Select(flm => flm.MaintainerId).OrderBy(mid => mid))) + .ForMember(fl => fl.UpstreamFilterListIds, + o => o.MapFrom(fl => + fl.UpstreamFilterLists.Select(ufl => ufl.UpstreamFilterListId).OrderBy(flid => flid))) + .ForMember(fl => fl.ForkFilterListIds, + o => o.MapFrom(fl => + fl.ForkFilterLists.Select(ffl => ffl.ForkFilterListId).OrderBy(flid => flid))) + .ForMember(fl => fl.IncludedInFilterListIds, + o => o.MapFrom(fl => + fl.IncludedInFilterLists.Select(iifl => iifl.IncludedInFilterListId).OrderBy(flid => flid))) + .ForMember(fl => fl.IncludesFilterListIds, + o => o.MapFrom(fl => + fl.IncludesFilterLists.Select(ifl => ifl.IncludesFilterListId).OrderBy(flid => flid))) + .ForMember(fl => fl.DependencyFilterListIds, + o => o.MapFrom(fl => + fl.DependencyFilterLists.Select(dfl => dfl.DependencyFilterListId).OrderBy(flid => flid))) + .ForMember(fl => fl.DependentFilterListIds, + o => o.MapFrom(fl => + fl.DependentFilterLists.Select(dfl => dfl.DependentFilterListId).OrderBy(flid => flid))); + } + } + + public class ViewUrlViewModelProfile : Profile + { + public ViewUrlViewModelProfile() + { + CreateMap(); + } + } + + public class ListViewModel + { + public int Id { get; private set; } + public string Name { get; private set; } = null!; + public string? Description { get; private set; } + public int? LicenseId { get; private set; } + public IEnumerable? SyntaxIds { get; private set; } + public IEnumerable? LanguageIso6391s { get; private set; } + public IEnumerable? TagIds { get; private set; } + public IEnumerable? ViewUrls { get; private set; } + public Uri? HomeUrl { get; private set; } + public Uri? OnionUrl { get; private set; } + public Uri? PolicyUrl { get; private set; } + public Uri? SubmissionUrl { get; private set; } + public Uri? IssuesUrl { get; private set; } + public Uri? ForumUrl { get; private set; } + public Uri? ChatUrl { get; private set; } + public string? EmailAddress { get; private set; } + public Uri? DonateUrl { get; private set; } + public IEnumerable? MaintainerIds { get; private set; } + public IEnumerable? UpstreamFilterListIds { get; private set; } + public IEnumerable? ForkFilterListIds { get; private set; } + public IEnumerable? IncludedInFilterListIds { get; private set; } + public IEnumerable? IncludesFilterListIds { get; private set; } + public IEnumerable? DependencyFilterListIds { get; private set; } + public IEnumerable? DependentFilterListIds { get; private set; } + } + + public class ViewUrlViewModel + { + public short SegmentNumber { get; private set; } + public short Primariness { get; private set; } + public Uri Url { get; private set; } = null!; + } + } +} \ No newline at end of file diff --git a/services/directory/src/FilterLists.Directory.Application/Queries/GetLists.cs b/services/directory/src/FilterLists.Directory.Application/Queries/GetLists.cs index df57e43d6..51186adba 100644 --- a/services/directory/src/FilterLists.Directory.Application/Queries/GetLists.cs +++ b/services/directory/src/FilterLists.Directory.Application/Queries/GetLists.cs @@ -54,38 +54,9 @@ public ListViewModelProfile() .ForMember(fl => fl.TagIds, o => o.MapFrom(fl => fl.FilterListTags.Select(flt => flt.TagId).OrderBy(tid => tid))) - .ForMember(fl => fl.ViewUrls, - o => o.MapFrom(fl => - fl.ViewUrls.OrderBy(u => u.SegmentNumber).ThenBy(u => u.Primariness))) .ForMember(fl => fl.MaintainerIds, o => o.MapFrom(fl => - fl.FilterListMaintainers.Select(flm => flm.MaintainerId).OrderBy(mid => mid))) - .ForMember(fl => fl.UpstreamFilterListIds, - o => o.MapFrom(fl => - fl.UpstreamFilterLists.Select(ufl => ufl.UpstreamFilterListId).OrderBy(flid => flid))) - .ForMember(fl => fl.ForkFilterListIds, - o => o.MapFrom(fl => - fl.ForkFilterLists.Select(ffl => ffl.ForkFilterListId).OrderBy(flid => flid))) - .ForMember(fl => fl.IncludedInFilterListIds, - o => o.MapFrom(fl => - fl.IncludedInFilterLists.Select(iifl => iifl.IncludedInFilterListId).OrderBy(flid => flid))) - .ForMember(fl => fl.IncludesFilterListIds, - o => o.MapFrom(fl => - fl.IncludesFilterLists.Select(ifl => ifl.IncludesFilterListId).OrderBy(flid => flid))) - .ForMember(fl => fl.DependencyFilterListIds, - o => o.MapFrom(fl => - fl.DependencyFilterLists.Select(dfl => dfl.DependencyFilterListId).OrderBy(flid => flid))) - .ForMember(fl => fl.DependentFilterListIds, - o => o.MapFrom(fl => - fl.DependentFilterLists.Select(dfl => dfl.DependentFilterListId).OrderBy(flid => flid))); - } - } - - public class ViewUrlViewModelProfile : Profile - { - public ViewUrlViewModelProfile() - { - CreateMap(); + fl.FilterListMaintainers.Select(flm => flm.MaintainerId).OrderBy(mid => mid))); } } @@ -98,30 +69,7 @@ public class ListViewModel public IEnumerable? SyntaxIds { get; private set; } public IEnumerable? LanguageIso6391s { get; private set; } public IEnumerable? TagIds { get; private set; } - public IEnumerable? ViewUrls { get; private set; } - public Uri? HomeUrl { get; private set; } - public Uri? OnionUrl { get; private set; } - public Uri? PolicyUrl { get; private set; } - public Uri? SubmissionUrl { get; private set; } - public Uri? IssuesUrl { get; private set; } - public Uri? ForumUrl { get; private set; } - public Uri? ChatUrl { get; private set; } - public string? EmailAddress { get; private set; } - public Uri? DonateUrl { get; private set; } public IEnumerable? MaintainerIds { get; private set; } - public IEnumerable? UpstreamFilterListIds { get; private set; } - public IEnumerable? ForkFilterListIds { get; private set; } - public IEnumerable? IncludedInFilterListIds { get; private set; } - public IEnumerable? IncludesFilterListIds { get; private set; } - public IEnumerable? DependencyFilterListIds { get; private set; } - public IEnumerable? DependentFilterListIds { get; private set; } - } - - public class ViewUrlViewModel - { - public short SegmentNumber { get; private set; } - public short Primariness { get; private set; } - public Uri Url { get; private set; } = null!; } } } \ No newline at end of file