using FabApprovalWorkerService.Models; using System.Text; namespace FabApprovalWorkerService.Services; public interface IECNService { Task> GetExpiringTECNs(); Task> GetExpiredTECNs(); Task> GetTECNNotificationUserEmails(); } public class ECNService : IECNService { private readonly ILogger _logger; private readonly IDalService _dalService; public ECNService(ILogger logger, IDalService dalService) { _logger = logger ?? throw new ArgumentNullException("ILogger not injected"); _dalService = dalService ?? throw new ArgumentNullException("IDalService not injected"); } public async Task> GetExpiredTECNs() { try { _logger.LogInformation("Attempting to get all TECNs expired in the last day"); string today = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); string yesterday = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd HH:mm:ss"); StringBuilder queryBuilder = new StringBuilder(); queryBuilder.Append("select ECNNumber, IsTECN, ExpirationDate, ExtensionDate, OriginatorID, Title "); queryBuilder.Append($"from ECN where IsTECN = 1 and "); queryBuilder.Append($"ExpirationDate between '{yesterday}' "); queryBuilder.Append($"and '{today}'"); IEnumerable expiredTecns = (await _dalService.QueryAsync(queryBuilder.ToString())); IEnumerable expiredTecnsNotExtended = expiredTecns .Where(e => e.ExtensionDate < DateTime.Now) .ToList(); return expiredTecnsNotExtended; } catch (Exception ex) { StringBuilder errMsgBuilder = new(); errMsgBuilder.Append("An exception occurred when attempting to get all TECNs expired in the last day. "); errMsgBuilder.Append($"Exception: {ex.Message}"); _logger.LogError(errMsgBuilder.ToString()); throw; } } public async Task> GetExpiringTECNs() { try { _logger.LogInformation("Attempting to get all TECNs expiring in the next five days"); string today = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); string fiveDaysFromToday = DateTime.Now.AddDays(5).ToString("yyyy-MM-dd HH:mm:ss"); StringBuilder queryBuilder = new StringBuilder(); queryBuilder.Append("select * from ECN "); queryBuilder.Append($"where IsTECN = 1 and "); queryBuilder.Append($"ExpirationDate between '{today}' "); queryBuilder.Append($"and '{fiveDaysFromToday}';"); IEnumerable expiringTecns = (await _dalService.QueryAsync(queryBuilder.ToString())); IEnumerable expiringTecnsNotExtended = expiringTecns .Where(e => e.ExtensionDate <= DateTime.Now.AddDays(5)) .ToList(); return expiringTecnsNotExtended; } catch (Exception ex) { StringBuilder errMsgBuilder = new(); errMsgBuilder.Append("An exception occurred when attempting to get all TECNs expiring in the next five days. "); errMsgBuilder.Append($"Exception: {ex.Message}"); _logger.LogError(errMsgBuilder.ToString()); throw; } } public async Task> GetTECNNotificationUserEmails() { try { _logger.LogInformation("Attempting to get TECN notification user emails"); string sql = "select u.Email from TECNNotificationsUsers t join Users u on t.UserId = u.UserID;"; IEnumerable tecnNotificationUserEmails = (await _dalService.QueryAsync(sql)).ToList(); _logger.LogInformation($"Found {tecnNotificationUserEmails.Count()} TECN notification user emails"); return tecnNotificationUserEmails; } catch (Exception ex) { StringBuilder errMsgBuilder = new(); errMsgBuilder.Append("An exception occurred when attempting to get TECN notification user emails. "); errMsgBuilder.Append($"Exception: {ex.Message}"); _logger.LogError(errMsgBuilder.ToString()); throw; } } }