Pull Request 33520 suggestions Injected AppSettings instead of using GetEnvironmentVariable at Services level When debugging only app.Services.GetRequiredService<IPCRBService>(); Get ready to use VSCode IDE Align .editorconfig files
66 lines
3.3 KiB
C#
66 lines
3.3 KiB
C#
using System.Text;
|
|
|
|
using FabApprovalWorkerService.Models;
|
|
using FabApprovalWorkerService.Utilities;
|
|
|
|
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($"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<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;
|
|
}
|
|
}
|
|
} |