feat(directory): add GET maintainers endpoint

This commit is contained in:
Collin M. Barrett 2020-08-25 08:04:13 -05:00
parent 42664f43e4
commit 60d1713a94
2 changed files with 88 additions and 0 deletions

View file

@ -0,0 +1,26 @@
using System.Threading;
using System.Threading.Tasks;
using FilterLists.Directory.Application.Queries;
using MediatR;
using Microsoft.AspNetCore.Mvc;
namespace FilterLists.Directory.Api.Controllers
{
[ApiController]
[Route("v1/[controller]")]
public class MaintainersController : ControllerBase
{
private readonly IMediator _mediator;
public MaintainersController(IMediator mediator)
{
_mediator = mediator;
}
[HttpGet]
public async Task<IActionResult> Get(CancellationToken cancellationToken)
{
return Ok(await _mediator.Send(new GetMaintainers.Query(), cancellationToken));
}
}
}

View file

@ -0,0 +1,62 @@
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 GetMaintainers
{
public class Query : IRequest<IEnumerable<MaintainerViewModel>>
{
}
public class Handler : IRequestHandler<Query, IEnumerable<MaintainerViewModel>>
{
private readonly IQueryContext _context;
private readonly IMapper _mapper;
public Handler(IQueryContext context, IMapper mapper)
{
_context = context;
_mapper = mapper;
}
public async Task<IEnumerable<MaintainerViewModel>> Handle(
Query request,
CancellationToken cancellationToken)
{
return await _context.Maintainers
.ProjectTo<MaintainerViewModel>(_mapper.ConfigurationProvider)
.ToListAsync(cancellationToken);
}
}
public class MaintainerViewModelProfile : Profile
{
public MaintainerViewModelProfile()
{
CreateMap<Maintainer, MaintainerViewModel>()
.ForMember(m => m.FilterListIds,
o => o.MapFrom(m => m.FilterListMaintainers.Select(fl => fl.FilterList.Id)));
}
}
public class MaintainerViewModel
{
public int Id { get; set; }
public string Name { get; set; } = null!;
public Uri? Url { get; set; }
public string? EmailAddress { get; set; }
public string? TwitterHandle { get; set; }
public IEnumerable<int>? FilterListIds { get; set; }
}
}
}