From 2b89c2b6fb38f03296ec8366e2ac5a4c3999b2ab Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Mon, 24 Sep 2018 16:12:52 -0500 Subject: [PATCH] add tags endpoint ref #505 --- .../V1/Controllers/TagsController.cs | 16 ++++++++--- .../Extensions/ConfigureServicesCollection.cs | 6 +++-- .../ListTagDtoMappingProfile.cs | 3 +-- .../MappingProfiles/TagDtoMappingProfile.cs | 16 +++++++++++ src/FilterLists.Services/Tag/Models/TagDto.cs | 12 +++++++++ src/FilterLists.Services/Tag/TagService.cs | 27 +++++++++++++++++++ 6 files changed, 73 insertions(+), 7 deletions(-) create mode 100644 src/FilterLists.Services/Tag/MappingProfiles/TagDtoMappingProfile.cs create mode 100644 src/FilterLists.Services/Tag/Models/TagDto.cs create mode 100644 src/FilterLists.Services/Tag/TagService.cs diff --git a/src/FilterLists.Api/V1/Controllers/TagsController.cs b/src/FilterLists.Api/V1/Controllers/TagsController.cs index b34a305f0..7fa13c453 100644 --- a/src/FilterLists.Api/V1/Controllers/TagsController.cs +++ b/src/FilterLists.Api/V1/Controllers/TagsController.cs @@ -2,6 +2,7 @@ using FilterLists.Data.Entities; using FilterLists.Services.Seed; using FilterLists.Services.Seed.Models; +using FilterLists.Services.Tag; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Caching.Memory; @@ -9,9 +10,18 @@ namespace FilterLists.Api.V1.Controllers { public class TagsController : BaseController { - public TagsController(IMemoryCache memoryCache, SeedService seedService) : base(memoryCache, seedService) - { - } + private readonly TagService tagService; + + public TagsController(IMemoryCache memoryCache, SeedService seedService, TagService tagService) : + base(memoryCache, seedService) => this.tagService = tagService; + + [HttpGet] + public async Task Index() => + Json(await MemoryCache.GetOrCreate("TagsController_Index", entry => + { + entry.AbsoluteExpirationRelativeToNow = MemoryCacheExpirationDefault; + return tagService.GetAll(); + })); [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 7b9ed397b..61a4aac53 100644 --- a/src/FilterLists.Services/DependencyInjection/Extensions/ConfigureServicesCollection.cs +++ b/src/FilterLists.Services/DependencyInjection/Extensions/ConfigureServicesCollection.cs @@ -5,6 +5,7 @@ using FilterLists.Services.Seed; using FilterLists.Services.Snapshot; using FilterLists.Services.Software; +using FilterLists.Services.Tag; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; @@ -22,10 +23,11 @@ public static void AddFilterListsApiServices(this IServiceCollection services, I o.UseMySql(config.GetConnectionString("FilterListsConnection"), m => m.MigrationsAssembly("FilterLists.Api"))); services.TryAddScoped(); - services.TryAddScoped(); - services.TryAddScoped(); services.TryAddScoped(); services.TryAddScoped(); + services.TryAddScoped(); + services.TryAddScoped(); + services.TryAddScoped(); services.AddAutoMapper(); } diff --git a/src/FilterLists.Services/FilterList/MappingProfiles/ListTagDtoMappingProfile.cs b/src/FilterLists.Services/FilterList/MappingProfiles/ListTagDtoMappingProfile.cs index e881a7b7e..d4ff92e9c 100644 --- a/src/FilterLists.Services/FilterList/MappingProfiles/ListTagDtoMappingProfile.cs +++ b/src/FilterLists.Services/FilterList/MappingProfiles/ListTagDtoMappingProfile.cs @@ -1,5 +1,4 @@ using AutoMapper; -using FilterLists.Data.Entities; using FilterLists.Services.FilterList.Models; using JetBrains.Annotations; @@ -9,7 +8,7 @@ namespace FilterLists.Services.FilterList.MappingProfiles public class ListTagDtoMappingProfile : Profile { public ListTagDtoMappingProfile() => - CreateMap() + CreateMap() .ForMember(dest => dest.ColorHex, opt => opt.MapFrom(src => TagColors.Colors[(int)src.Id])); diff --git a/src/FilterLists.Services/Tag/MappingProfiles/TagDtoMappingProfile.cs b/src/FilterLists.Services/Tag/MappingProfiles/TagDtoMappingProfile.cs new file mode 100644 index 000000000..b2ef2e0da --- /dev/null +++ b/src/FilterLists.Services/Tag/MappingProfiles/TagDtoMappingProfile.cs @@ -0,0 +1,16 @@ +using AutoMapper; +using FilterLists.Services.Tag.Models; +using JetBrains.Annotations; + +namespace FilterLists.Services.Tag.MappingProfiles +{ + [UsedImplicitly] + public class TagDtoMappingProfile : Profile + { + public TagDtoMappingProfile() => + CreateMap() + .ForMember(dest => dest.Id, + opt => opt.MapFrom(src => + (int)src.Id)); + } +} \ No newline at end of file diff --git a/src/FilterLists.Services/Tag/Models/TagDto.cs b/src/FilterLists.Services/Tag/Models/TagDto.cs new file mode 100644 index 000000000..17f026530 --- /dev/null +++ b/src/FilterLists.Services/Tag/Models/TagDto.cs @@ -0,0 +1,12 @@ +using JetBrains.Annotations; + +namespace FilterLists.Services.Tag.Models +{ + [UsedImplicitly] + public class TagDto + { + public int Id { get; set; } + public string Name { get; set; } + public string Description { get; set; } + } +} \ No newline at end of file diff --git a/src/FilterLists.Services/Tag/TagService.cs b/src/FilterLists.Services/Tag/TagService.cs new file mode 100644 index 000000000..92e127c24 --- /dev/null +++ b/src/FilterLists.Services/Tag/TagService.cs @@ -0,0 +1,27 @@ +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using AutoMapper; +using AutoMapper.QueryableExtensions; +using FilterLists.Data; +using FilterLists.Services.Tag.Models; +using JetBrains.Annotations; +using Microsoft.EntityFrameworkCore; + +namespace FilterLists.Services.Tag +{ + [UsedImplicitly] + public class TagService : Service + { + public TagService(FilterListsDbContext dbContext, IConfigurationProvider mapConfig) + : base(dbContext, mapConfig) + { + } + + public async Task> GetAll() => + await DbContext.Tags + .OrderBy(s => s.Name) + .ProjectTo(MapConfig) + .ToListAsync(); + } +} \ No newline at end of file