PCRB follow up client side logic
This commit is contained in:
@ -13,6 +13,7 @@ public interface IApprovalService {
|
||||
Task<IEnumerable<User>> GetApprovalGroupMembers(int subRoleId);
|
||||
Task CreateApproval(Approval approval);
|
||||
Task UpdateApproval(Approval approval);
|
||||
Task DeleteApproval(int approvalID);
|
||||
Task Approve(Approval approval);
|
||||
Task Deny(Approval approval);
|
||||
Task<IEnumerable<Approval>> GetApprovalsForIssueId(int issueId, bool bypassCache);
|
||||
@ -156,6 +157,20 @@ public class ApprovalService : IApprovalService {
|
||||
await GetApprovalsForUserId(approval.UserID, true);
|
||||
}
|
||||
|
||||
public async Task DeleteApproval(int approvalID) {
|
||||
if (approvalID <= 0) throw new ArgumentException("Invalid approval ID");
|
||||
|
||||
HttpClient httpClient = _httpClientFactory.CreateClient("API");
|
||||
|
||||
HttpRequestMessage requestMessage = new(HttpMethod.Delete, $"approval?approvalID={approvalID}");
|
||||
|
||||
HttpResponseMessage responseMessage = await httpClient.SendAsync(requestMessage);
|
||||
|
||||
if (!responseMessage.IsSuccessStatusCode) {
|
||||
throw new Exception($"Unable to delete approval, because {responseMessage.ReasonPhrase}");
|
||||
}
|
||||
}
|
||||
|
||||
public async Task Approve(Approval approval) {
|
||||
if (approval is null) throw new ArgumentNullException("approval cannot be null");
|
||||
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
using MesaFabApproval.Shared.Models;
|
||||
|
||||
using Microsoft.AspNetCore.Components;
|
||||
using Microsoft.AspNetCore.Components.Authorization;
|
||||
|
||||
using MudBlazor;
|
||||
@ -12,18 +13,22 @@ public class MesaFabApprovalAuthStateProvider : AuthenticationStateProvider, IDi
|
||||
private readonly IAuthenticationService _authService;
|
||||
private readonly IUserService _userService;
|
||||
private readonly ISnackbar _snackbar;
|
||||
private readonly NavigationManager _navigationManager;
|
||||
|
||||
public User? CurrentUser { get; private set; }
|
||||
|
||||
public MesaFabApprovalAuthStateProvider(IAuthenticationService authService,
|
||||
ISnackbar snackbar,
|
||||
IUserService userService) {
|
||||
IUserService userService,
|
||||
NavigationManager navigationManager) {
|
||||
_authService = authService ??
|
||||
throw new ArgumentNullException("IAuthenticationService not injected");
|
||||
_snackbar = snackbar ??
|
||||
throw new ArgumentNullException("ISnackbar not injected");
|
||||
_userService = userService ??
|
||||
throw new ArgumentNullException("IUserService not injected");
|
||||
_navigationManager = navigationManager ??
|
||||
throw new ArgumentNullException("NavigationManager not injected");
|
||||
AuthenticationStateChanged += OnAuthenticationStateChangedAsync;
|
||||
}
|
||||
|
||||
|
@ -36,6 +36,7 @@ public interface IPCRBService {
|
||||
Task UpdatePCR3Document(PCR3Document document);
|
||||
Task<IEnumerable<PCR3Document>> GetPCR3DocumentsForPlanNumber(int planNumber, bool bypassCache);
|
||||
Task NotifyNewApprovals(PCRB pcrb);
|
||||
Task NotifyApprover(PCRBNotification notification);
|
||||
Task NotifyApprovers(PCRBNotification notification);
|
||||
Task NotifyOriginator(PCRBNotification notification);
|
||||
Task NotifyResponsiblePerson(PCRBActionItemNotification notification);
|
||||
@ -43,6 +44,10 @@ public interface IPCRBService {
|
||||
Task<IEnumerable<PCRBFollowUp>> GetFollowUpsByPlanNumber(int planNumber, bool bypassCache);
|
||||
Task UpdateFollowUp(PCRBFollowUp followUp);
|
||||
Task DeleteFollowUp(int id);
|
||||
Task CreateFollowUpComment(PCRBFollowUpComment comment);
|
||||
Task<IEnumerable<PCRBFollowUpComment>> GetFollowUpCommentsByPlanNumber(int planNumber, bool bypassCache);
|
||||
Task UpdateFollowUpComment(PCRBFollowUpComment comment);
|
||||
Task DeleteFollowUpComment(int id);
|
||||
}
|
||||
|
||||
public class PCRBService : IPCRBService {
|
||||
@ -712,6 +717,26 @@ public class PCRBService : IPCRBService {
|
||||
throw new Exception($"Unable to notify new PCRB approvers, because {responseMessage.ReasonPhrase}");
|
||||
}
|
||||
|
||||
public async Task NotifyApprover(PCRBNotification notification) {
|
||||
if (notification is null) throw new ArgumentNullException("notification cannot be null");
|
||||
if (notification.PCRB is null) throw new ArgumentNullException("PCRB cannot be null");
|
||||
if (notification.Approval is null) throw new ArgumentNullException("approval cannot be null");
|
||||
if (string.IsNullOrWhiteSpace(notification.Message)) throw new ArgumentException("message cannot be null or empty");
|
||||
|
||||
HttpClient httpClient = _httpClientFactory.CreateClient("API");
|
||||
|
||||
HttpRequestMessage requestMessage = new(HttpMethod.Post, $"pcrb/notify/approver") {
|
||||
Content = new StringContent(JsonSerializer.Serialize(notification),
|
||||
Encoding.UTF8,
|
||||
"application/json")
|
||||
};
|
||||
|
||||
HttpResponseMessage responseMessage = await httpClient.SendAsync(requestMessage);
|
||||
|
||||
if (!responseMessage.IsSuccessStatusCode)
|
||||
throw new Exception($"Unable to notify PCRB approver, because {responseMessage.ReasonPhrase}");
|
||||
}
|
||||
|
||||
public async Task NotifyApprovers(PCRBNotification notification) {
|
||||
if (notification is null) throw new ArgumentNullException("notification cannot be null");
|
||||
if (notification.PCRB is null) throw new ArgumentNullException("PCRB cannot be null");
|
||||
@ -812,7 +837,7 @@ public class PCRBService : IPCRBService {
|
||||
new List<PCRBFollowUp>();
|
||||
|
||||
if (followUps.Count() > 0)
|
||||
_cache.Set($"pcrbFollowUps{planNumber}", followUps, DateTimeOffset.Now.AddMinutes(5));
|
||||
_cache.Set($"pcrbFollowUps{planNumber}", followUps, DateTimeOffset.Now.AddHours(1));
|
||||
} else {
|
||||
throw new Exception(responseMessage.ReasonPhrase);
|
||||
}
|
||||
@ -836,6 +861,8 @@ public class PCRBService : IPCRBService {
|
||||
|
||||
if (!responseMessage.IsSuccessStatusCode)
|
||||
throw new Exception(responseMessage.ReasonPhrase);
|
||||
|
||||
await GetFollowUpsByPlanNumber(followUp.PlanNumber, true);
|
||||
}
|
||||
|
||||
public async Task DeleteFollowUp(int id) {
|
||||
@ -849,4 +876,93 @@ public class PCRBService : IPCRBService {
|
||||
|
||||
if (!responseMessage.IsSuccessStatusCode) throw new Exception(responseMessage.ReasonPhrase);
|
||||
}
|
||||
|
||||
public async Task CreateFollowUpComment(PCRBFollowUpComment comment) {
|
||||
if (comment is null) throw new ArgumentNullException("comment up cannot be null");
|
||||
|
||||
HttpClient httpClient = _httpClientFactory.CreateClient("API");
|
||||
|
||||
HttpRequestMessage requestMessage = new(HttpMethod.Post, $"pcrb/followUpComment") {
|
||||
Content = new StringContent(JsonSerializer.Serialize(comment),
|
||||
Encoding.UTF8,
|
||||
"application/json")
|
||||
};
|
||||
|
||||
HttpResponseMessage responseMessage = await httpClient.SendAsync(requestMessage);
|
||||
|
||||
if (!responseMessage.IsSuccessStatusCode)
|
||||
throw new Exception(responseMessage.ReasonPhrase);
|
||||
|
||||
await GetFollowUpCommentsByPlanNumber(comment.PlanNumber, true);
|
||||
}
|
||||
|
||||
public async Task<IEnumerable<PCRBFollowUpComment>> GetFollowUpCommentsByPlanNumber(int planNumber, bool bypassCache) {
|
||||
if (planNumber <= 0) throw new ArgumentException($"{planNumber} is not a valid PCRB Plan#");
|
||||
|
||||
IEnumerable<PCRBFollowUpComment>? comments = null;
|
||||
if (!bypassCache)
|
||||
comments = _cache.Get<IEnumerable<PCRBFollowUpComment>>($"pcrbFollowUpComments{planNumber}");
|
||||
|
||||
if (comments is null) {
|
||||
HttpClient httpClient = _httpClientFactory.CreateClient("API");
|
||||
|
||||
HttpRequestMessage requestMessage =
|
||||
new(HttpMethod.Get, $"pcrb/followUpComments?planNumber={planNumber}&bypassCache={bypassCache}");
|
||||
|
||||
HttpResponseMessage responseMessage = await httpClient.SendAsync(requestMessage);
|
||||
|
||||
if (responseMessage.IsSuccessStatusCode) {
|
||||
string responseContent = await responseMessage.Content.ReadAsStringAsync();
|
||||
|
||||
JsonSerializerOptions jsonSerializerOptions = new() {
|
||||
PropertyNameCaseInsensitive = true
|
||||
};
|
||||
|
||||
comments = JsonSerializer.Deserialize<IEnumerable<PCRBFollowUpComment>>(responseContent, jsonSerializerOptions) ??
|
||||
new List<PCRBFollowUpComment>();
|
||||
|
||||
if (comments.Count() > 0) {
|
||||
foreach (PCRBFollowUpComment comment in comments)
|
||||
comment.User = await _userService.GetUserByUserId(comment.UserID);
|
||||
|
||||
_cache.Set($"pcrbFollowUpComments{planNumber}", comments, DateTimeOffset.Now.AddHours(1));
|
||||
}
|
||||
} else {
|
||||
throw new Exception(responseMessage.ReasonPhrase);
|
||||
}
|
||||
}
|
||||
|
||||
return comments;
|
||||
}
|
||||
|
||||
public async Task UpdateFollowUpComment(PCRBFollowUpComment comment) {
|
||||
if (comment is null) throw new ArgumentNullException("comment up cannot be null");
|
||||
|
||||
HttpClient httpClient = _httpClientFactory.CreateClient("API");
|
||||
|
||||
HttpRequestMessage requestMessage = new(HttpMethod.Put, $"pcrb/followUpComment") {
|
||||
Content = new StringContent(JsonSerializer.Serialize(comment),
|
||||
Encoding.UTF8,
|
||||
"application/json")
|
||||
};
|
||||
|
||||
HttpResponseMessage responseMessage = await httpClient.SendAsync(requestMessage);
|
||||
|
||||
if (!responseMessage.IsSuccessStatusCode)
|
||||
throw new Exception(responseMessage.ReasonPhrase);
|
||||
|
||||
await GetFollowUpCommentsByPlanNumber(comment.PlanNumber, true);
|
||||
}
|
||||
|
||||
public async Task DeleteFollowUpComment(int id) {
|
||||
if (id <= 0) throw new ArgumentException($"{id} is not a valid PCRB follow up comment ID");
|
||||
|
||||
HttpClient httpClient = _httpClientFactory.CreateClient("API");
|
||||
|
||||
HttpRequestMessage requestMessage = new(HttpMethod.Delete, $"pcrb/followUpComment?id={id}");
|
||||
|
||||
HttpResponseMessage responseMessage = await httpClient.SendAsync(requestMessage);
|
||||
|
||||
if (!responseMessage.IsSuccessStatusCode) throw new Exception(responseMessage.ReasonPhrase);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user