using Microsoft.Extensions.Caching.Distributed; using Mirea.Api.Security.Common.Interfaces; using System; using System.Text.Json; using System.Threading; using System.Threading.Tasks; namespace Mirea.Api.Endpoint.Common.Services.Security; public class DistributedCacheService(IDistributedCache cache) : ICacheService { public async Task SetAsync(string key, T value, TimeSpan? absoluteExpirationRelativeToNow = null, TimeSpan? slidingExpiration = null, CancellationToken cancellationToken = default) { var options = new DistributedCacheEntryOptions { AbsoluteExpirationRelativeToNow = absoluteExpirationRelativeToNow, SlidingExpiration = slidingExpiration }; var serializedValue = JsonSerializer.SerializeToUtf8Bytes(value); await cache.SetAsync(key, serializedValue, options, cancellationToken); } public async Task GetAsync(string key, CancellationToken cancellationToken = default) { var cachedValue = await cache.GetAsync(key, cancellationToken); return cachedValue == null ? default : JsonSerializer.Deserialize(cachedValue); } public Task RemoveAsync(string key, CancellationToken cancellationToken = default) => cache.RemoveAsync(key, cancellationToken); }