When debugging only app.Services.GetRequiredService<IPCRBService>(); Injected AppSettings instead of using GetEnvironmentVariable at Services level Get ready to use VSCode IDE
46 lines
1.6 KiB
C#
46 lines
1.6 KiB
C#
using Microsoft.Extensions.Caching.Memory;
|
|
|
|
namespace MesaFabApproval.API.Services;
|
|
|
|
public interface IECNService {
|
|
Task<bool> IsValidECNNumber(int number);
|
|
}
|
|
|
|
public class ECNService : IECNService {
|
|
private readonly ILogger<ECNService> _logger;
|
|
private readonly IMemoryCache _cache;
|
|
private readonly IDalService _dalService;
|
|
|
|
public ECNService(ILogger<ECNService> 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<bool> IsValidECNNumber(int number) {
|
|
try {
|
|
_logger.LogInformation($"Attempting to determine if {number} is a valid ECN#");
|
|
|
|
if (number <= 0) return false;
|
|
|
|
IEnumerable<int> ecnNumbers = _cache.Get<IEnumerable<int>>("ecnNumbers") ?? new HashSet<int>();
|
|
|
|
if (ecnNumbers.Contains(number)) return true;
|
|
|
|
string sql = $"select count(ECNNumber) as count from ECN where ECNNumber={number}";
|
|
|
|
int rowsReturned = (await _dalService.QueryAsync<int>(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;
|
|
}
|
|
}
|
|
} |