using FabApprovalWorkerService.Models; using FabApprovalWorkerService.Utilities; using System.Text; namespace FabApprovalWorkerService.Services; public interface IMRBService { Task MRBNumberIsActive(int number); Task GetMRBById(int id); } public class MRBService : IMRBService { private readonly ILogger _logger; private readonly IDalService _dalService; public MRBService(ILogger logger, IDalService dalService) { _logger = logger ?? throw new ArgumentNullException("ILogger not injected"); _dalService = dalService ?? throw new ArgumentNullException("IDalService not injected"); } public async Task MRBNumberIsActive(int number) { try { _logger.LogInformation($"Attempting to determine if {number} is an active MRB#"); if (number <= 0) return false; StringBuilder queryBuilder = new(); queryBuilder.Append($"select count(MRBNumber) as count from MRB where MRBNumber={number} and "); queryBuilder.Append($"(CloseDate is null or CloseDate >= '{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 MRB#, because {ex.Message}"); throw; } } public async Task GetMRBById(int id) { try { _logger.LogInformation("Attempting to get an MRB by ID"); if (id < 0) throw new ArgumentException("Invalid MRB number"); string sql = $"select * from MRB where MRBNumber={id}"; MRB? mrb = (await _dalService.QueryAsync(sql)).FirstOrDefault(); if (mrb is null) throw new Exception($"Unable to get MRB {id}"); return mrb; } catch (Exception ex) { _logger.LogError($"Unable to get MRB# {id}, because {ex.Message}"); throw; } } }