using System; using Enyim.Caching; using Expedience.Infrastructure.Models; using Microsoft.EntityFrameworkCore; namespace Expedience.Infrastructure { public interface IExpedienceRepository : IDisposable { Task> GetDutyCompletionRecords(string expac, CancellationToken cancellationToken); } public class ExpedienceRepository : IExpedienceRepository { private readonly ExpedienceContext _dbContext; private readonly IMemcachedClient _memcachedClient; public ExpedienceRepository(ExpedienceContext dbContext, IMemcachedClient memcachedClient) { _dbContext = dbContext; _memcachedClient = memcachedClient; } public async Task> GetDutyCompletionRecords(string expac, CancellationToken cancellationToken) { var cacheKey = $"xpd-dcr-{expac}"; var cacheSeconds = 600; var records = await _memcachedClient.GetValueOrCreateAsync(cacheKey, cacheSeconds, async () => await _dbContext.DutyCompletionRecords.FromSqlInterpolated($"SELECT * FROM public.get_dutycompletionrecords({expac})") .ToListAsync()); return records; } public void Dispose() { _memcachedClient.Dispose(); } } }