using Microsoft.Extensions.Caching.Memory; namespace MesaFabApproval.API.Services; public interface IECNService { Task IsValidECNNumber(int number); } public class ECNService : IECNService { private readonly ILogger _logger; private readonly IMemoryCache _cache; private readonly IDalService _dalService; public ECNService(ILogger logger, IMemoryCache cache, IDalService dalService) { _logger = logger ?? throw new ArgumentNullException("ILogger not injected"); _cache = cache ?? throw new ArgumentNullException("IMemoryCache not injected"); _dalService = dalService ?? throw new ArgumentNullException("IDalService not injected"); } public async Task IsValidECNNumber(int number) { try { _logger.LogInformation($"Attempting to determine if {number} is a valid ECN#"); if (number <= 0) return false; IEnumerable ecnNumbers = _cache.Get>("ecnNumbers") ?? new HashSet(); if (ecnNumbers.Contains(number)) return true; string sql = $"select count(ECNNumber) as count from ECN where ECNNumber={number}"; int rowsReturned = (await _dalService.QueryAsync(sql)).FirstOrDefault(); if (rowsReturned > 0) { ecnNumbers.Append(number); _cache.Set("ecnNumbers", ecnNumbers); return true; } return false; } catch (Exception ex) { _logger.LogError($"Unable to determine if {number} is a valid ECN#, because {ex.Message}"); throw; } } }