diff --git a/src/FilterLists.Api/V1/Controllers/LanguagesController.cs b/src/FilterLists.Api/V1/Controllers/LanguagesController.cs index e9e17e41a..d64eeaf89 100644 --- a/src/FilterLists.Api/V1/Controllers/LanguagesController.cs +++ b/src/FilterLists.Api/V1/Controllers/LanguagesController.cs @@ -1,5 +1,6 @@ using System.Threading.Tasks; using FilterLists.Data.Entities; +using FilterLists.Services.Language; using FilterLists.Services.Seed; using FilterLists.Services.Seed.Models; using Microsoft.AspNetCore.Mvc; @@ -9,9 +10,18 @@ namespace FilterLists.Api.V1.Controllers { public class LanguagesController : BaseController { - public LanguagesController(IMemoryCache memoryCache, SeedService seedService) : base(memoryCache, seedService) - { - } + private readonly LanguageService languageService; + + public LanguagesController(IMemoryCache memoryCache, SeedService seedService, LanguageService languageService) : + base(memoryCache, seedService) => this.languageService = languageService; + + [HttpGet] + public async Task Index() => + Json(await MemoryCache.GetOrCreate("LanguageService_Index", entry => + { + entry.AbsoluteExpirationRelativeToNow = FourHoursFromNow; + return languageService.GetAllTargeted(); + })); [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 5968c6b52..7b9ed397b 100644 --- a/src/FilterLists.Services/DependencyInjection/Extensions/ConfigureServicesCollection.cs +++ b/src/FilterLists.Services/DependencyInjection/Extensions/ConfigureServicesCollection.cs @@ -1,6 +1,7 @@ using AutoMapper; using FilterLists.Data; using FilterLists.Services.FilterList; +using FilterLists.Services.Language; using FilterLists.Services.Seed; using FilterLists.Services.Snapshot; using FilterLists.Services.Software; @@ -23,6 +24,7 @@ public static void AddFilterListsApiServices(this IServiceCollection services, I services.TryAddScoped(); services.TryAddScoped(); services.TryAddScoped(); + services.TryAddScoped(); services.TryAddScoped(); services.AddAutoMapper(); } diff --git a/src/FilterLists.Services/Language/LanguageService.cs b/src/FilterLists.Services/Language/LanguageService.cs new file mode 100644 index 000000000..75b856d98 --- /dev/null +++ b/src/FilterLists.Services/Language/LanguageService.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.Language.Models; +using JetBrains.Annotations; +using Microsoft.EntityFrameworkCore; + +namespace FilterLists.Services.Language +{ + [UsedImplicitly] + public class LanguageService : Service + { + public LanguageService(FilterListsDbContext dbContext, IConfigurationProvider mapConfig) + : base(dbContext, mapConfig) + { + } + + public async Task> GetAllTargeted() => + await DbContext.Languages.Where(l => l.FilterListLanguages.Any()) + .OrderBy(s => s.Name) + .ProjectTo(MapConfig) + .ToListAsync(); + } +} \ No newline at end of file diff --git a/src/FilterLists.Services/Language/Models/LanguageDto.cs b/src/FilterLists.Services/Language/Models/LanguageDto.cs new file mode 100644 index 000000000..e671cb69a --- /dev/null +++ b/src/FilterLists.Services/Language/Models/LanguageDto.cs @@ -0,0 +1,11 @@ +using JetBrains.Annotations; + +namespace FilterLists.Services.Language.Models +{ + [UsedImplicitly] + public class LanguageDto + { + public string Iso6391 { get; set; } + public string Name { get; set; } + } +} \ No newline at end of file