using System.Text; using FabApprovalWorkerService.Models; using FabApprovalWorkerService.Utilities; namespace FabApprovalWorkerService.Services; public interface IApprovalService { Task> GetActiveApprovalsWithNotificationOlderThanFiveDays(); Task UpdateApproval(Approval approval); } public class ApprovalService : IApprovalService { private readonly ILogger _logger; private readonly IDalService _dalService; public ApprovalService(ILogger logger, IDalService dalService) { _logger = logger ?? throw new ArgumentNullException("ILogger not injected"); _dalService = dalService ?? throw new ArgumentNullException("IDalService not injected"); } public async Task> GetActiveApprovalsWithNotificationOlderThanFiveDays() { try { _logger.LogInformation($"Attempting to get active approvals with notifications older than five days"); StringBuilder queryBuilder = new(); queryBuilder.Append("select * from Approval where "); queryBuilder.Append($"ItemStatus=0 and AssignedDate > '{DateTimeOffset.Now.AddDays(-365).DateTime.ToString("yyyy-MM-dd HH:mm:ss")}' and "); queryBuilder.Append($"(CompletedDate is null or CompletedDate >= '{DateTimeUtilities.MAX_DT.ToString("yyyy-MM-dd HH:mm")}') and "); queryBuilder.Append($"(NotifyDate is null or NotifyDate < '{DateTimeOffset.Now.AddDays(-5).DateTime.ToString("yyyy-MM-dd HH:mm")}')"); IEnumerable approvals = await _dalService.QueryAsync(queryBuilder.ToString()); return approvals; } catch (Exception ex) { _logger.LogError($"Unable to get active approvals with notifications older than five days, because {ex.Message}"); throw; } } public async Task UpdateApproval(Approval approval) { try { _logger.LogInformation("Attempting to update an approval"); if (approval is null) throw new ArgumentNullException("Approval cannot be null"); StringBuilder queryBuilder = new(); queryBuilder.Append($"update Approval set IssueID={approval.IssueID}, RoleName='{approval.RoleName}', "); queryBuilder.Append($"SubRole='{approval.SubRole}', UserID={approval.UserID}, SubRoleID={approval.SubRoleID}, "); queryBuilder.Append($"ItemStatus={Convert.ToInt32(approval.ItemStatus)}, Step={approval.Step}, "); queryBuilder.Append($"NotifyDate='{approval.NotifyDate.ToString("yyyy-MM-dd HH:mm:ss")}', "); queryBuilder.Append($"AssignedDate='{approval.AssignedDate.ToString("yyyy-MM-dd HH:mm:ss")}', "); queryBuilder.Append($"CompletedDate='{approval.CompletedDate.ToString("yyyy-MM-dd HH:mm:ss")}', "); queryBuilder.Append($"Comments='{approval.Comments.Replace("'", "''")}', "); queryBuilder.Append($"TaskID={approval.TaskID} "); queryBuilder.Append($"where ApprovalID={approval.ApprovalID};"); int rowsUpdated = await _dalService.ExecuteAsync(queryBuilder.ToString()); if (rowsUpdated <= 0) throw new Exception("Unable to update approval in database"); } catch (Exception ex) { _logger.LogError($"Approval update failed, because {ex.Message}"); throw; } } }