diff --git a/src/FilterLists.Api/V1/Controllers/BaseController.cs b/src/FilterLists.Api/V1/Controllers/BaseController.cs new file mode 100644 index 000000000..e7ef5dfca --- /dev/null +++ b/src/FilterLists.Api/V1/Controllers/BaseController.cs @@ -0,0 +1,35 @@ +using System; +using FilterLists.Services.Models; +using FilterLists.Services.Services; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Caching.Memory; + +namespace FilterLists.Api.V1.Controllers +{ + [ApiVersion("1.0")] + [Produces("application/json")] + [ResponseCache(CacheProfileName = "Long-Lived")] + public class BaseController : Controller + { + protected readonly IMemoryCache MemoryCache; + protected readonly SeedService SeedService; + + public BaseController(IMemoryCache memoryCache, SeedService seedService) + { + MemoryCache = memoryCache; + SeedService = seedService; + } + + [HttpGet] + public IActionResult Seed() + { + var controllerName = ControllerContext.RouteData.Values["controller"].ToString(); + return MemoryCache.GetOrCreate(CacheKeys.Entry, entry => + { + entry.AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(86400); + //TODO: GetAll() by seed type of request controller + return Json(SeedService.GetAll()); + }); + } + } +} \ No newline at end of file diff --git a/src/FilterLists.Api/V1/Controllers/ListsController.cs b/src/FilterLists.Api/V1/Controllers/ListsController.cs index 4cdc4b8b5..0f2141065 100644 --- a/src/FilterLists.Api/V1/Controllers/ListsController.cs +++ b/src/FilterLists.Api/V1/Controllers/ListsController.cs @@ -1,42 +1,28 @@ using System; -using FilterLists.Services; +using FilterLists.Services.Services; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Caching.Memory; namespace FilterLists.Api.V1.Controllers { - [ApiVersion("1.0")] - [Produces("application/json")] - [ResponseCache(CacheProfileName = "Long-Lived")] - public class ListsController : Controller + public class ListsController : BaseController { private readonly FilterListService filterListService; - private readonly IMemoryCache memoryCache; - public ListsController(IMemoryCache memoryCache, FilterListService filterListService) + public ListsController(IMemoryCache memoryCache, SeedService seedService, FilterListService filterListService) : + base(memoryCache, seedService) { - this.memoryCache = memoryCache; this.filterListService = filterListService; } [HttpGet] public IActionResult Index() { - return memoryCache.GetOrCreate(CacheKeys.Entry, entry => + return MemoryCache.GetOrCreate(CacheKeys.Entry, entry => { entry.AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(86400); return Json(filterListService.GetAllSummaries()); }); } - - [HttpGet] - public IActionResult Seed() - { - return memoryCache.GetOrCreate(CacheKeys.Entry, entry => - { - entry.AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(86400); - return Json(filterListService.GetAllSeeds()); - }); - } } } \ No newline at end of file diff --git a/src/FilterLists.Services/DependencyInjection/Extensions/ConfigureServicesCollection.cs b/src/FilterLists.Services/DependencyInjection/Extensions/ConfigureServicesCollection.cs index 082511793..c4869309f 100644 --- a/src/FilterLists.Services/DependencyInjection/Extensions/ConfigureServicesCollection.cs +++ b/src/FilterLists.Services/DependencyInjection/Extensions/ConfigureServicesCollection.cs @@ -1,5 +1,6 @@ using AutoMapper; using FilterLists.Data; +using FilterLists.Services.Services; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; @@ -15,6 +16,7 @@ public static void AddFilterListsServices(this IServiceCollection services, ICon services.AddEntityFrameworkMySql().AddDbContextPool(options => options.UseMySql(configuration.GetConnectionString("FilterListsConnection"), b => b.MigrationsAssembly("FilterLists.Api"))); + services.TryAddScoped(); services.TryAddScoped(); services.AddAutoMapper(); } diff --git a/src/FilterLists.Services/Models/LanguageSeedDto.cs b/src/FilterLists.Services/Models/LanguageSeedDto.cs new file mode 100644 index 000000000..c048daac6 --- /dev/null +++ b/src/FilterLists.Services/Models/LanguageSeedDto.cs @@ -0,0 +1,14 @@ +namespace FilterLists.Services.Models +{ + public class LanguageSeedDto + { + public int Id { get; set; } + public string Iso6391 { get; set; } + public string Iso6392 { get; set; } + public string Iso6392B { get; set; } + public string Iso6392T { get; set; } + public string Iso6393 { get; set; } + public string LocalName { get; set; } + public string Name { get; set; } + } +} \ No newline at end of file diff --git a/src/FilterLists.Services/FilterListService.cs b/src/FilterLists.Services/Services/FilterListService.cs similarity index 76% rename from src/FilterLists.Services/FilterListService.cs rename to src/FilterLists.Services/Services/FilterListService.cs index 869e0b26e..a5070ea62 100644 --- a/src/FilterLists.Services/FilterListService.cs +++ b/src/FilterLists.Services/Services/FilterListService.cs @@ -3,7 +3,7 @@ using FilterLists.Data; using FilterLists.Services.Models; -namespace FilterLists.Services +namespace FilterLists.Services.Services { public class FilterListService { @@ -20,10 +20,5 @@ public IEnumerable GetAllSummaries() { return mapper.Map>(filterListsDbContext.FilterLists); } - - public IEnumerable GetAllSeeds() - { - return mapper.Map>(filterListsDbContext.FilterLists); - } } } \ No newline at end of file diff --git a/src/FilterLists.Services/Services/SeedService.cs b/src/FilterLists.Services/Services/SeedService.cs new file mode 100644 index 000000000..78cc8c927 --- /dev/null +++ b/src/FilterLists.Services/Services/SeedService.cs @@ -0,0 +1,23 @@ +using System.Collections.Generic; +using AutoMapper; +using FilterLists.Data; + +namespace FilterLists.Services.Services +{ + public class SeedService + { + private readonly FilterListsDbContext filterListsDbContext; + private readonly IMapper mapper; + + public SeedService(FilterListsDbContext filterListsDbContext, IMapper mapper) + { + this.filterListsDbContext = filterListsDbContext; + this.mapper = mapper; + } + + public IEnumerable GetAll() where T : class + { + return mapper.Map>(filterListsDbContext.Set()); + } + } +} \ No newline at end of file