From f4f1298448a9544fac4d23a3f6bee039e34c624b Mon Sep 17 00:00:00 2001 From: collinbarrett Date: Wed, 26 Sep 2018 12:36:44 -0500 Subject: [PATCH] add API maintainers IGet endpoints ref #505 --- FilterLists.postman_collection.json | 39 +++++++++++++++++++ .../V1/Controllers/MaintainersController.cs | 20 ++++++++-- .../Extensions/ConfigureServicesCollection.cs | 2 + .../ListMaintainerDtoMappingProfile.cs | 3 +- .../Maintainer/MaintainerService.cs | 30 ++++++++++++++ .../MaintainerDtoMappingProfile.cs | 21 ++++++++++ .../Maintainer/Models/MaintainerDto.cs | 16 ++++++++ 7 files changed, 125 insertions(+), 6 deletions(-) create mode 100644 src/FilterLists.Services/Maintainer/MaintainerService.cs create mode 100644 src/FilterLists.Services/Maintainer/MappingProfiles/MaintainerDtoMappingProfile.cs create mode 100644 src/FilterLists.Services/Maintainer/Models/MaintainerDto.cs diff --git a/FilterLists.postman_collection.json b/FilterLists.postman_collection.json index 61e474ef3..ee006a5dd 100644 --- a/FilterLists.postman_collection.json +++ b/FilterLists.postman_collection.json @@ -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": { diff --git a/src/FilterLists.Api/V1/Controllers/MaintainersController.cs b/src/FilterLists.Api/V1/Controllers/MaintainersController.cs index 39b5226ef..0019eb966 100644 --- a/src/FilterLists.Api/V1/Controllers/MaintainersController.cs +++ b/src/FilterLists.Api/V1/Controllers/MaintainersController.cs @@ -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 GetAll() => + await Get(() => maintainerService.GetAllAsync()); + + [HttpGet] + [Route("{id}")] + public async Task GetById(int id) => + await Get(() => maintainerService.GetByIdAsync(id), id); [HttpGet("seed")] public async Task Seed() => diff --git a/src/FilterLists.Services/DependencyInjection/Extensions/ConfigureServicesCollection.cs b/src/FilterLists.Services/DependencyInjection/Extensions/ConfigureServicesCollection.cs index e0ae37bcd..dfd8565b2 100644 --- a/src/FilterLists.Services/DependencyInjection/Extensions/ConfigureServicesCollection.cs +++ b/src/FilterLists.Services/DependencyInjection/Extensions/ConfigureServicesCollection.cs @@ -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(); services.TryAddScoped(); services.TryAddScoped(); + services.TryAddScoped(); services.TryAddScoped(); services.TryAddScoped(); services.TryAddScoped(); diff --git a/src/FilterLists.Services/FilterList/MappingProfiles/ListMaintainerDtoMappingProfile.cs b/src/FilterLists.Services/FilterList/MappingProfiles/ListMaintainerDtoMappingProfile.cs index f90014515..8e79b4734 100644 --- a/src/FilterLists.Services/FilterList/MappingProfiles/ListMaintainerDtoMappingProfile.cs +++ b/src/FilterLists.Services/FilterList/MappingProfiles/ListMaintainerDtoMappingProfile.cs @@ -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() + CreateMap() .ForMember(dest => dest.Id, opt => opt.MapFrom(src => (int)src.Id)) diff --git a/src/FilterLists.Services/Maintainer/MaintainerService.cs b/src/FilterLists.Services/Maintainer/MaintainerService.cs new file mode 100644 index 000000000..7068fbabb --- /dev/null +++ b/src/FilterLists.Services/Maintainer/MaintainerService.cs @@ -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> GetAllAsync() => + await DbContext.Maintainers + .ProjectTo(MapConfig) + .ToListAsync(); + + public async Task GetByIdAsync(int id) => + await DbContext.Maintainers + .ProjectTo(MapConfig) + .FirstOrDefaultAsync(l => l.Id == id); + } +} \ No newline at end of file diff --git a/src/FilterLists.Services/Maintainer/MappingProfiles/MaintainerDtoMappingProfile.cs b/src/FilterLists.Services/Maintainer/MappingProfiles/MaintainerDtoMappingProfile.cs new file mode 100644 index 000000000..98fca4296 --- /dev/null +++ b/src/FilterLists.Services/Maintainer/MappingProfiles/MaintainerDtoMappingProfile.cs @@ -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() + .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))); + } +} \ No newline at end of file diff --git a/src/FilterLists.Services/Maintainer/Models/MaintainerDto.cs b/src/FilterLists.Services/Maintainer/Models/MaintainerDto.cs new file mode 100644 index 000000000..1bd2e5e2c --- /dev/null +++ b/src/FilterLists.Services/Maintainer/Models/MaintainerDto.cs @@ -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 FilterListIds { get; set; } + public string HomeUrl { get; set; } + public string Name { get; set; } + public string TwitterHandle { get; set; } + } +} \ No newline at end of file