using MesaFabApproval.API.Services; using MesaFabApproval.Shared.Models; using MesaFabApproval.Shared.Services; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; namespace MesaFabApproval.API.Controllers; [ApiController] [Authorize] public class ECNController : ControllerBase { private readonly ILogger _logger; private readonly IECNService _ecnService; private readonly IMonInWorkerClient _monInClient; public ECNController(ILogger logger, IECNService ecnService, IMonInWorkerClient monInClient) { _logger = logger ?? throw new ArgumentNullException("ILogger not injected"); _ecnService = ecnService ?? throw new ArgumentNullException("IECNService not injected"); _monInClient = monInClient ?? throw new ArgumentNullException("IMonInWorkerClient not injected"); } [HttpGet] [Route("ecn/isValidEcnNumber")] public async Task IsValidEcnNumber(int number) { DateTime start = DateTime.Now; bool isInternalError = false; string errorMessage = ""; try { _logger.LogInformation($"Attempting to determine if {number} is a valid ECN#"); if (number <= 0) return Ok(false); bool isValid = await _ecnService.IsValidECNNumber(number); return Ok(isValid); } catch (Exception ex) { isInternalError = true; errorMessage = $"Cannot determine if {number} is a valid ECN#, because {ex.Message}"; return Problem(errorMessage); } finally { string metricName = "IsValidEcnNumber"; DateTime end = DateTime.Now; double millisecondsDiff = (end - start).TotalMilliseconds; _monInClient.PostAverage(metricName + "Latency", millisecondsDiff); if (isInternalError) { _logger.LogError(errorMessage); _monInClient.PostStatus(metricName, StatusValue.Critical); } else { _monInClient.PostStatus(metricName, StatusValue.Ok); } } } [HttpGet] [Route("ecn/allNumbers")] public async Task GetAllECNNumbers() { DateTime start = DateTime.Now; bool isInternalError = false; string errorMessage = ""; try { _logger.LogInformation($"Attempting to get all ECN#s"); IEnumerable allEcnNumbers = await _ecnService.GetAllECNNumbers(); return Ok(allEcnNumbers); } catch (Exception ex) { isInternalError = true; errorMessage = $"Cannot get all ECN#s, because {ex.Message}"; return Problem(errorMessage); } finally { string metricName = "GetAllECNNumbers"; DateTime end = DateTime.Now; double millisecondsDiff = (end - start).TotalMilliseconds; _monInClient.PostAverage(metricName + "Latency", millisecondsDiff); if (isInternalError) { _logger.LogError(errorMessage); _monInClient.PostStatus(metricName, StatusValue.Critical); } else { _monInClient.PostStatus(metricName, StatusValue.Ok); } } } }