using System; using System.Threading.Tasks; using API.Constants; using API.Data; using API.DTOs.Filtering.v2; using EasyCaching.Core; using Microsoft.AspNetCore.Mvc; namespace API.Controllers; /// /// This is responsible for Filter caching /// public class FilterController : BaseApiController { private readonly IUnitOfWork _unitOfWork; private readonly IEasyCachingProviderFactory _cacheFactory; public FilterController(IUnitOfWork unitOfWork, IEasyCachingProviderFactory cacheFactory) { _unitOfWork = unitOfWork; _cacheFactory = cacheFactory; } [HttpGet] public async Task> GetFilter(string name) { var provider = _cacheFactory.GetCachingProvider(EasyCacheProfiles.Filter); if (string.IsNullOrEmpty(name)) return Ok(null); var filter = await provider.GetAsync(name); if (filter.HasValue) { filter.Value.Name = name; return Ok(filter.Value); } return Ok(null); } /// /// Caches the filter in the backend and returns a temp string for retrieving. /// /// The cache line lives for only 1 hour /// /// [HttpPost("create-temp")] public async Task> CreateTempFilter(FilterV2Dto filterDto) { var provider = _cacheFactory.GetCachingProvider(EasyCacheProfiles.Filter); var name = filterDto.Name; if (string.IsNullOrEmpty(filterDto.Name)) { name = Guid.NewGuid().ToString(); } await provider.SetAsync(name, filterDto, TimeSpan.FromHours(1)); return name; } }