add API maintainers IGet endpoints

ref #505
This commit is contained in:
collinbarrett 2018-09-26 12:36:44 -05:00
parent 59f63e395b
commit f4f1298448
7 changed files with 125 additions and 6 deletions

View file

@ -325,6 +325,45 @@
{
"name": "maintainers",
"item": [
{
"name": "maintainers",
"request": {
"method": "GET",
"header": [],
"body": {},
"url": {
"raw": "{{baseUrl}}/{{version}}/maintainers",
"host": [
"{{baseUrl}}"
],
"path": [
"{{version}}",
"maintainers"
]
}
},
"response": []
},
{
"name": "maintainers/{id}",
"request": {
"method": "GET",
"header": [],
"body": {},
"url": {
"raw": "{{baseUrl}}/{{version}}/maintainers/1",
"host": [
"{{baseUrl}}"
],
"path": [
"{{version}}",
"maintainers",
"1"
]
}
},
"response": []
},
{
"name": "maintainers/seed",
"request": {

View file

@ -1,6 +1,7 @@
using System.Threading.Tasks;
using FilterLists.Api.V1.Interfaces;
using FilterLists.Data.Entities;
using FilterLists.Services.Maintainer;
using FilterLists.Services.Seed;
using FilterLists.Services.Seed.Models;
using Microsoft.AspNetCore.Mvc;
@ -8,11 +9,22 @@
namespace FilterLists.Api.V1.Controllers
{
public class MaintainersController : BaseController, ISeed
public class MaintainersController : BaseController, IGet, ISeed
{
public MaintainersController(IMemoryCache memoryCache, SeedService seedService) : base(memoryCache, seedService)
{
}
private readonly MaintainerService maintainerService;
public MaintainersController(IMemoryCache memoryCache, SeedService seedService,
MaintainerService maintainerService) : base(memoryCache, seedService) =>
this.maintainerService = maintainerService;
[HttpGet]
public async Task<IActionResult> GetAll() =>
await Get(() => maintainerService.GetAllAsync());
[HttpGet]
[Route("{id}")]
public async Task<IActionResult> GetById(int id) =>
await Get(() => maintainerService.GetByIdAsync(id), id);
[HttpGet("seed")]
public async Task<IActionResult> Seed() =>

View file

@ -3,6 +3,7 @@
using FilterLists.Services.FilterList;
using FilterLists.Services.Language;
using FilterLists.Services.License;
using FilterLists.Services.Maintainer;
using FilterLists.Services.Seed;
using FilterLists.Services.Snapshot;
using FilterLists.Services.Software;
@ -26,6 +27,7 @@ public static void AddFilterListsApiServices(this IServiceCollection services, I
services.TryAddScoped<FilterListService>();
services.TryAddScoped<LanguageService>();
services.TryAddScoped<LicenseService>();
services.TryAddScoped<MaintainerService>();
services.TryAddScoped<SeedService>();
services.TryAddScoped<SoftwareService>();
services.TryAddScoped<TagService>();

View file

@ -1,6 +1,5 @@
using System.Linq;
using AutoMapper;
using FilterLists.Data.Entities;
using FilterLists.Services.FilterList.Models;
using JetBrains.Annotations;
@ -10,7 +9,7 @@ namespace FilterLists.Services.FilterList.MappingProfiles
public class ListMaintainerDtoMappingProfile : Profile
{
public ListMaintainerDtoMappingProfile() =>
CreateMap<Maintainer, ListMaintainerDto>()
CreateMap<Data.Entities.Maintainer, ListMaintainerDto>()
.ForMember(dest => dest.Id,
opt => opt.MapFrom(src =>
(int)src.Id))

View file

@ -0,0 +1,30 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using AutoMapper;
using AutoMapper.QueryableExtensions;
using FilterLists.Data;
using FilterLists.Services.Maintainer.Models;
using JetBrains.Annotations;
using Microsoft.EntityFrameworkCore;
namespace FilterLists.Services.Maintainer
{
[UsedImplicitly]
public class MaintainerService : Service
{
public MaintainerService(FilterListsDbContext dbContext, IConfigurationProvider mapConfig)
: base(dbContext, mapConfig)
{
}
public async Task<IEnumerable<MaintainerDto>> GetAllAsync() =>
await DbContext.Maintainers
.ProjectTo<MaintainerDto>(MapConfig)
.ToListAsync();
public async Task<MaintainerDto> GetByIdAsync(int id) =>
await DbContext.Maintainers
.ProjectTo<MaintainerDto>(MapConfig)
.FirstOrDefaultAsync(l => l.Id == id);
}
}

View file

@ -0,0 +1,21 @@
using System.Linq;
using AutoMapper;
using FilterLists.Services.Maintainer.Models;
using JetBrains.Annotations;
namespace FilterLists.Services.Maintainer.MappingProfiles
{
[UsedImplicitly]
public class MaintainerDtoMappingProfile : Profile
{
public MaintainerDtoMappingProfile() =>
CreateMap<Data.Entities.Maintainer, MaintainerDto>()
.ForMember(dest => dest.Id,
opt => opt.MapFrom(src =>
(int)src.Id))
.ForMember(dest => dest.FilterListIds,
opt => opt.MapFrom(src =>
src.FilterListMaintainers
.Select(fm => (int)fm.FilterListId)));
}
}

View file

@ -0,0 +1,16 @@
using System.Collections.Generic;
using JetBrains.Annotations;
namespace FilterLists.Services.Maintainer.Models
{
[UsedImplicitly]
public class MaintainerDto
{
public int Id { get; set; }
public string EmailAddress { get; set; }
public List<int> FilterListIds { get; set; }
public string HomeUrl { get; set; }
public string Name { get; set; }
public string TwitterHandle { get; set; }
}
}