diff --git a/RMuseum/Controllers/ContributionStatsController.cs b/RMuseum/Controllers/ContributionStatsController.cs index a98f93b8..be74f7b5 100644 --- a/RMuseum/Controllers/ContributionStatsController.cs +++ b/RMuseum/Controllers/ContributionStatsController.cs @@ -1,6 +1,7 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Caching.Memory; using Newtonsoft.Json; using RMuseum.Models.Generic.ViewModels; using RMuseum.Services; @@ -9,6 +10,7 @@ using System; using System.Collections.Generic; using System.Net; using System.Threading.Tasks; +using System.Windows.Forms; namespace RMuseum.Controllers { @@ -28,14 +30,18 @@ namespace RMuseum.Controllers [ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))] public async Task GetApprovedEditsGroupedByDateAsync([FromQuery] PagingParameterModel paging, Guid? userId = null) { - var pagedResult = await _service.GetApprovedEditsGroupedByDateAsync(paging, userId); - if (!string.IsNullOrEmpty(pagedResult.ExceptionString)) - return BadRequest(pagedResult.ExceptionString); - + var cacheKey = $"poem/corrections/daily/{DateTime.Now.Date}/{paging.PageSize}/{paging.PageNumber}/{userId ?? Guid.Empty}"; + if (!_memoryCache.TryGetValue(cacheKey, out (PaginationMetadata PagingMeta, GroupedByDateViewModel[] Tracks) pagedResult)) + { + var res = await _service.GetApprovedEditsGroupedByDateAsync(paging, userId); + if (!string.IsNullOrEmpty(res.ExceptionString)) + return BadRequest(res.ExceptionString); + pagedResult = res.Result; + } // Paging Header - HttpContext.Response.Headers.Append("paging-headers", JsonConvert.SerializeObject(pagedResult.Result.PagingMeta)); + HttpContext.Response.Headers.Append("paging-headers", JsonConvert.SerializeObject(pagedResult.PagingMeta)); - return Ok(pagedResult.Result.Tracks); + return Ok(pagedResult.Tracks); } /// @@ -51,14 +57,19 @@ namespace RMuseum.Controllers [ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))] public async Task GetApprovedEditsGroupedByUserAsync([FromQuery] PagingParameterModel paging,DateTime? day, Guid? userId) { - var pagedResult = await _service.GetApprovedEditsGroupedByUserAsync(paging, day, userId); - if (!string.IsNullOrEmpty(pagedResult.ExceptionString)) - return BadRequest(pagedResult.ExceptionString); + var cacheKey = $"poem/corrections/by/user/{(day ?? DateTime.Now).Date}/{paging.PageSize}/{paging.PageNumber}/{userId ?? Guid.Empty}"; + if (!_memoryCache.TryGetValue(cacheKey, out (PaginationMetadata PagingMeta, GroupedByUserViewModel[] Tracks) pagedResult)) + { + var res = await _service.GetApprovedEditsGroupedByUserAsync(paging, day, userId); + if (!string.IsNullOrEmpty(res.ExceptionString)) + return BadRequest(res.ExceptionString); + pagedResult = res.Result; + } // Paging Header - HttpContext.Response.Headers.Append("paging-headers", JsonConvert.SerializeObject(pagedResult.Result.PagingMeta)); + HttpContext.Response.Headers.Append("paging-headers", JsonConvert.SerializeObject(pagedResult.PagingMeta)); - return Ok(pagedResult.Result.Tracks); + return Ok(pagedResult.Tracks); } /// @@ -71,12 +82,14 @@ namespace RMuseum.Controllers [ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))] public async Task GetApprrovedEditsSummedUpStatsAsync() { - var res = await _service.GetApprrovedEditsSummedUpStatsAsync(); - if (!string.IsNullOrEmpty(res.ExceptionString)) - return BadRequest(res.ExceptionString); - - - return Ok(res.Result); + if (!_memoryCache.TryGetValue($"poem/corrections/{DateTime.Now.Date}", out SummedUpViewModel result)) + { + var res = await _service.GetApprrovedEditsSummedUpStatsAsync(); + if (!string.IsNullOrEmpty(res.ExceptionString)) + return BadRequest(res.ExceptionString); + result = res.Result; + } + return Ok(result); } /// @@ -84,13 +97,20 @@ namespace RMuseum.Controllers /// protected readonly IContributionStatsService _service; + /// + /// IMemoryCache + /// + protected readonly IMemoryCache _memoryCache; + /// /// constructor /// /// - public ContributionStatsController(IContributionStatsService service) + /// + public ContributionStatsController(IContributionStatsService service, IMemoryCache memoryCache) { _service = service; + _memoryCache = memoryCache; } } } diff --git a/RMuseum/RMuseum.xml b/RMuseum/RMuseum.xml index 041d202a..d775eb3d 100644 --- a/RMuseum/RMuseum.xml +++ b/RMuseum/RMuseum.xml @@ -790,11 +790,17 @@ service - + + + IMemoryCache + + + constructor +