Created approval reminder worker
This commit is contained in:
65
FabApprovalWorkerService/Services/ApprovalService.cs
Normal file
65
FabApprovalWorkerService/Services/ApprovalService.cs
Normal file
@ -0,0 +1,65 @@
|
||||
using FabApprovalWorkerService.Models;
|
||||
using FabApprovalWorkerService.Utilities;
|
||||
|
||||
using System.Text;
|
||||
|
||||
namespace FabApprovalWorkerService.Services;
|
||||
|
||||
public interface IApprovalService {
|
||||
Task<IEnumerable<Approval>> GetActiveApprovalsWithNotificationOlderThanFiveDays();
|
||||
Task UpdateApproval(Approval approval);
|
||||
}
|
||||
|
||||
public class ApprovalService : IApprovalService {
|
||||
private readonly ILogger<ApprovalService> _logger;
|
||||
private readonly IDalService _dalService;
|
||||
|
||||
public ApprovalService(ILogger<ApprovalService> logger, IDalService dalService) {
|
||||
_logger = logger ?? throw new ArgumentNullException("ILogger not injected");
|
||||
_dalService = dalService ?? throw new ArgumentNullException("IDalService not injected");
|
||||
}
|
||||
|
||||
public async Task<IEnumerable<Approval>> 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($"(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).ToString("yyyy-MM-dd HH:mm")}')");
|
||||
|
||||
IEnumerable<Approval> approvals = await _dalService.QueryAsync<Approval>(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;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user