using System.Text; using FabApprovalWorkerService.Models; using FabApprovalWorkerService.Utilities; namespace FabApprovalWorkerService.Services; public interface IPCRBService { Task PCRBNumberIsActive(int number); public Task GetPCRBByPlanNumber(int planNumber); } public class PCRBService : IPCRBService { private readonly ILogger _logger; private readonly IDalService _dalService; public PCRBService(ILogger logger, IDalService dalService) { _logger = logger ?? throw new ArgumentNullException("ILogger not injected"); _dalService = dalService ?? throw new ArgumentNullException("IDalService not injected"); } public async Task PCRBNumberIsActive(int number) { try { _logger.LogInformation($"Attempting to determine if {number} is an active PCRB#"); if (number <= 0) return false; StringBuilder queryBuilder = new(); queryBuilder.Append("select count(PlanNumber) as count from CCChangeControl "); queryBuilder.Append($"where PlanNumber={number} and "); queryBuilder.Append($"(ClosedDate is null or ClosedDate >= '{DateTimeUtilities.MAX_DT.ToString("yyyy-MM-dd HH:mm")}')"); int rowsReturned = (await _dalService.QueryAsync(queryBuilder.ToString())).FirstOrDefault(); return rowsReturned > 0; } catch (Exception ex) { _logger.LogError($"Unable to determine if {number} is an active PCRB#, because {ex.Message}"); throw; } } public async Task GetPCRBByPlanNumber(int planNumber) { try { _logger.LogInformation("Attempting to get a PCRB by plan#"); if (planNumber <= 0) throw new ArgumentException($"{planNumber} is not a valid PCRB#"); string sql = $"select * from CCChangeControl where PlanNumber={planNumber}"; PCRB? pcrb = (await _dalService.QueryAsync(sql)).FirstOrDefault(); if (pcrb is null) throw new Exception($"unable to find PCRB {planNumber}"); return pcrb; } catch (Exception ex) { _logger.LogError($"Unable to get PCRB# {planNumber}, because {ex.Message}"); throw; } } }