diff --git a/src/FilterLists.Api/V1/Controllers/EntityController.cs b/src/FilterLists.Api/V1/Controllers/EntityController.cs index d4e9871ce..c92492893 100644 --- a/src/FilterLists.Api/V1/Controllers/EntityController.cs +++ b/src/FilterLists.Api/V1/Controllers/EntityController.cs @@ -1,5 +1,5 @@ using System; -using FilterLists.Services.Models; +using System.Threading.Tasks; using FilterLists.Services.Services; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Caching.Memory; @@ -16,15 +16,55 @@ protected EntityController(IMemoryCache memoryCache, SeedService seedService) : } [HttpGet] - public IActionResult Seed() + public async Task Seed() { var controllerName = ControllerContext.RouteData.Values["controller"].ToString(); - return MemoryCache.GetOrCreate(CacheKeys.Entry, entry => + return await GetSeed(controllerName); + } + + private async Task GetSeed(string controllerName) + { + switch (controllerName) { - entry.AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(86400); - //TODO: GetAll() by seed type of request controller - return Json(SeedService.GetAll()); - }); + case "lists": + return await MemoryCache.GetOrCreateAsync(CacheKeys.Entry, entry => + { + entry.SlidingExpiration = TimeSpan.FromSeconds(3); + return Task.FromResult(Json(SeedService.GetAllFilterLists())); + }); + case "languages": + return await MemoryCache.GetOrCreateAsync(CacheKeys.Entry, entry => + { + entry.SlidingExpiration = TimeSpan.FromSeconds(3); + return Task.FromResult(Json(SeedService.GetAllLanguages())); + }); + case "licenses": + return await MemoryCache.GetOrCreateAsync(CacheKeys.Entry, entry => + { + entry.SlidingExpiration = TimeSpan.FromSeconds(3); + return Task.FromResult(Json(SeedService.GetAllLicenses())); + }); + case "maintainers": + return await MemoryCache.GetOrCreateAsync(CacheKeys.Entry, entry => + { + entry.SlidingExpiration = TimeSpan.FromSeconds(3); + return Task.FromResult(Json(SeedService.GetAllMaintainers())); + }); + case "software": + return await MemoryCache.GetOrCreateAsync(CacheKeys.Entry, entry => + { + entry.SlidingExpiration = TimeSpan.FromSeconds(3); + return Task.FromResult(Json(SeedService.GetAllSoftware())); + }); + case "syntaxes": + return await MemoryCache.GetOrCreateAsync(CacheKeys.Entry, entry => + { + entry.SlidingExpiration = TimeSpan.FromSeconds(3); + return Task.FromResult(Json(SeedService.GetAllSyntaxes())); + }); + default: + return await Task.FromResult(NotFound()); + } } } } \ No newline at end of file diff --git a/src/FilterLists.Api/V1/Controllers/LanguagesController.cs b/src/FilterLists.Api/V1/Controllers/LanguagesController.cs new file mode 100644 index 000000000..b2f18b680 --- /dev/null +++ b/src/FilterLists.Api/V1/Controllers/LanguagesController.cs @@ -0,0 +1,12 @@ +using FilterLists.Services.Services; +using Microsoft.Extensions.Caching.Memory; + +namespace FilterLists.Api.V1.Controllers +{ + public class LanguagesController : EntityController + { + public LanguagesController(IMemoryCache memoryCache, SeedService seedService) : base(memoryCache, seedService) + { + } + } +} \ No newline at end of file diff --git a/src/FilterLists.Api/V1/Controllers/LicensesController.cs b/src/FilterLists.Api/V1/Controllers/LicensesController.cs new file mode 100644 index 000000000..6c9967692 --- /dev/null +++ b/src/FilterLists.Api/V1/Controllers/LicensesController.cs @@ -0,0 +1,12 @@ +using FilterLists.Services.Services; +using Microsoft.Extensions.Caching.Memory; + +namespace FilterLists.Api.V1.Controllers +{ + public class LicensesController : EntityController + { + public LicensesController(IMemoryCache memoryCache, SeedService seedService) : base(memoryCache, seedService) + { + } + } +} \ 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 de9bc34e0..27c94f039 100644 --- a/src/FilterLists.Api/V1/Controllers/ListsController.cs +++ b/src/FilterLists.Api/V1/Controllers/ListsController.cs @@ -1,4 +1,5 @@ using System; +using System.Threading.Tasks; using FilterLists.Services.Services; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Caching.Memory; @@ -16,12 +17,12 @@ public ListsController(IMemoryCache memoryCache, SeedService seedService, Filter } [HttpGet] - public IActionResult Index() + public async Task Index() { - return MemoryCache.GetOrCreate(CacheKeys.Entry, entry => + return await MemoryCache.GetOrCreateAsync(CacheKeys.Entry, entry => { - entry.AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(86400); - return Json(filterListService.GetAllSummaries()); + entry.SlidingExpiration = TimeSpan.FromSeconds(3); + return Task.FromResult(Json(filterListService.GetAllSummaries())); }); } } diff --git a/src/FilterLists.Api/V1/Controllers/MaintainersController.cs b/src/FilterLists.Api/V1/Controllers/MaintainersController.cs new file mode 100644 index 000000000..0866bac90 --- /dev/null +++ b/src/FilterLists.Api/V1/Controllers/MaintainersController.cs @@ -0,0 +1,12 @@ +using FilterLists.Services.Services; +using Microsoft.Extensions.Caching.Memory; + +namespace FilterLists.Api.V1.Controllers +{ + public class MaintainersController : EntityController + { + public MaintainersController(IMemoryCache memoryCache, SeedService seedService) : base(memoryCache, seedService) + { + } + } +} \ No newline at end of file diff --git a/src/FilterLists.Api/V1/Controllers/SoftwareController.cs b/src/FilterLists.Api/V1/Controllers/SoftwareController.cs new file mode 100644 index 000000000..899f75ada --- /dev/null +++ b/src/FilterLists.Api/V1/Controllers/SoftwareController.cs @@ -0,0 +1,12 @@ +using FilterLists.Services.Services; +using Microsoft.Extensions.Caching.Memory; + +namespace FilterLists.Api.V1.Controllers +{ + public class SoftwareController : EntityController + { + public SoftwareController(IMemoryCache memoryCache, SeedService seedService) : base(memoryCache, seedService) + { + } + } +} \ No newline at end of file diff --git a/src/FilterLists.Api/V1/Controllers/SyntaxesController.cs b/src/FilterLists.Api/V1/Controllers/SyntaxesController.cs new file mode 100644 index 000000000..3cfba9f44 --- /dev/null +++ b/src/FilterLists.Api/V1/Controllers/SyntaxesController.cs @@ -0,0 +1,12 @@ +using FilterLists.Services.Services; +using Microsoft.Extensions.Caching.Memory; + +namespace FilterLists.Api.V1.Controllers +{ + public class SyntaxesController : EntityController + { + public SyntaxesController(IMemoryCache memoryCache, SeedService seedService) : base(memoryCache, seedService) + { + } + } +} \ No newline at end of file diff --git a/src/FilterLists.Services/MappingProfile.cs b/src/FilterLists.Services/MappingProfile.cs index 6a8da9472..a2edfda85 100644 --- a/src/FilterLists.Services/MappingProfile.cs +++ b/src/FilterLists.Services/MappingProfile.cs @@ -1,6 +1,7 @@ using AutoMapper.Configuration; using FilterLists.Data.Entities; using FilterLists.Services.Models; +using FilterLists.Services.Models.Seed; namespace FilterLists.Services { @@ -9,7 +10,17 @@ public class MappingProfile : MapperConfigurationExpression public MappingProfile() { CreateMap(); + MapSeedDtos(); + } + + private void MapSeedDtos() + { CreateMap(); + CreateMap(); + CreateMap(); + CreateMap(); + CreateMap(); + CreateMap(); } } } \ No newline at end of file diff --git a/src/FilterLists.Services/Models/FilterListSeedDto.cs b/src/FilterLists.Services/Models/Seed/FilterListSeedDto.cs similarity index 94% rename from src/FilterLists.Services/Models/FilterListSeedDto.cs rename to src/FilterLists.Services/Models/Seed/FilterListSeedDto.cs index 23df5df47..584f70421 100644 --- a/src/FilterLists.Services/Models/FilterListSeedDto.cs +++ b/src/FilterLists.Services/Models/Seed/FilterListSeedDto.cs @@ -1,6 +1,6 @@ using System; -namespace FilterLists.Services.Models +namespace FilterLists.Services.Models.Seed { public class FilterListSeedDto { diff --git a/src/FilterLists.Services/Models/LanguageSeedDto.cs b/src/FilterLists.Services/Models/Seed/LanguageSeedDto.cs similarity index 89% rename from src/FilterLists.Services/Models/LanguageSeedDto.cs rename to src/FilterLists.Services/Models/Seed/LanguageSeedDto.cs index c048daac6..a10155acd 100644 --- a/src/FilterLists.Services/Models/LanguageSeedDto.cs +++ b/src/FilterLists.Services/Models/Seed/LanguageSeedDto.cs @@ -1,4 +1,4 @@ -namespace FilterLists.Services.Models +namespace FilterLists.Services.Models.Seed { public class LanguageSeedDto { diff --git a/src/FilterLists.Services/Models/Seed/LicenseSeedDto.cs b/src/FilterLists.Services/Models/Seed/LicenseSeedDto.cs new file mode 100644 index 000000000..ec3c65991 --- /dev/null +++ b/src/FilterLists.Services/Models/Seed/LicenseSeedDto.cs @@ -0,0 +1,11 @@ +namespace FilterLists.Services.Models.Seed +{ + public class LicenseSeedDto + { + public int Id { get; set; } + public string DescriptionUrl { get; set; } + public string Name { get; set; } + public bool PermissiveAdaptation { get; set; } + public bool PermissiveCommercial { get; set; } + } +} \ No newline at end of file diff --git a/src/FilterLists.Services/Models/Seed/MaintainerSeedDto.cs b/src/FilterLists.Services/Models/Seed/MaintainerSeedDto.cs new file mode 100644 index 000000000..8912bf3b2 --- /dev/null +++ b/src/FilterLists.Services/Models/Seed/MaintainerSeedDto.cs @@ -0,0 +1,11 @@ +namespace FilterLists.Services.Models.Seed +{ + public class MaintainerSeedDto + { + public int Id { get; set; } + public string EmailAddress { get; set; } + public string HomeUrl { get; set; } + public string Name { get; set; } + public string TwitterHandle { get; set; } + } +} \ No newline at end of file diff --git a/src/FilterLists.Services/Models/Seed/SoftwareSeedDto.cs b/src/FilterLists.Services/Models/Seed/SoftwareSeedDto.cs new file mode 100644 index 000000000..e8c7ff235 --- /dev/null +++ b/src/FilterLists.Services/Models/Seed/SoftwareSeedDto.cs @@ -0,0 +1,10 @@ +namespace FilterLists.Services.Models.Seed +{ + public class SoftwareSeedDto + { + public int Id { get; set; } + public string DownloadUrl { get; set; } + public string HomeUrl { get; set; } + public string Name { get; set; } + } +} \ No newline at end of file diff --git a/src/FilterLists.Services/Models/Seed/SyntaxSeedDto.cs b/src/FilterLists.Services/Models/Seed/SyntaxSeedDto.cs new file mode 100644 index 000000000..326011b1a --- /dev/null +++ b/src/FilterLists.Services/Models/Seed/SyntaxSeedDto.cs @@ -0,0 +1,9 @@ +namespace FilterLists.Services.Models.Seed +{ + public class SyntaxSeedDto + { + public int Id { get; set; } + public string DefinitionUrl { get; set; } + public string Name { get; set; } + } +} \ No newline at end of file diff --git a/src/FilterLists.Services/Services/FilterListService.cs b/src/FilterLists.Services/Services/FilterListService.cs index a5070ea62..b1ee90ed6 100644 --- a/src/FilterLists.Services/Services/FilterListService.cs +++ b/src/FilterLists.Services/Services/FilterListService.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.Threading.Tasks; using AutoMapper; using FilterLists.Data; using FilterLists.Services.Models; @@ -16,9 +17,10 @@ public FilterListService(FilterListsDbContext filterListsDbContext, IMapper mapp this.mapper = mapper; } - public IEnumerable GetAllSummaries() + public async Task> GetAllSummaries() { - return mapper.Map>(filterListsDbContext.FilterLists); + return await Task.FromResult( + 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 index 78cc8c927..0573dbfe9 100644 --- a/src/FilterLists.Services/Services/SeedService.cs +++ b/src/FilterLists.Services/Services/SeedService.cs @@ -1,6 +1,9 @@ using System.Collections.Generic; +using System.Threading.Tasks; using AutoMapper; using FilterLists.Data; +using FilterLists.Data.Entities; +using FilterLists.Services.Models.Seed; namespace FilterLists.Services.Services { @@ -15,9 +18,38 @@ public SeedService(FilterListsDbContext filterListsDbContext, IMapper mapper) this.mapper = mapper; } - public IEnumerable GetAll() where T : class + public async Task> GetAllFilterLists() { - return mapper.Map>(filterListsDbContext.Set()); + return await Task.FromResult( + mapper.Map>(filterListsDbContext.Set())); + } + + public async Task> GetAllLanguages() + { + return await Task.FromResult( + mapper.Map>(filterListsDbContext.Set())); + } + + public async Task> GetAllLicenses() + { + return await Task.FromResult(mapper.Map>(filterListsDbContext.Set())); + } + + public async Task> GetAllMaintainers() + { + return await Task.FromResult( + mapper.Map>(filterListsDbContext.Set())); + } + + public async Task> GetAllSoftware() + { + return await Task.FromResult( + mapper.Map>(filterListsDbContext.Set())); + } + + public async Task> GetAllSyntaxes() + { + return await Task.FromResult(mapper.Map>(filterListsDbContext.Set())); } } } \ No newline at end of file