using System.Text.Json; namespace MesaFabApproval.Client.Services; public interface IECNService { Task ECNNumberIsValidStr(int ecnNumber); Task ECNNumberIsValid(int number); } public class ECNService : IECNService { private readonly IHttpClientFactory _httpClientFactory; public ECNService(IHttpClientFactory httpClientFactory) { _httpClientFactory = httpClientFactory ?? throw new ArgumentNullException("IHttpClientFactory not injected"); } public async Task ECNNumberIsValidStr(int ecnNumber) { if (ecnNumber <= 0 || !await ECNNumberIsValid(ecnNumber)) return $"{ecnNumber} is not a valid ECN#"; return null; } public async Task ECNNumberIsValid(int number) { if (number <= 0) return false; try { HttpClient httpClient = _httpClientFactory.CreateClient("API"); HttpRequestMessage requestMessage = new(HttpMethod.Get, $"ecn/isValidEcnNumber?number={number}"); HttpResponseMessage responseMessage = await httpClient.SendAsync(requestMessage); if (responseMessage.IsSuccessStatusCode) { string responseContent = await responseMessage.Content.ReadAsStringAsync(); JsonSerializerOptions jsonSerializerOptions = new() { PropertyNameCaseInsensitive = true }; bool isValid = JsonSerializer.Deserialize(responseContent, jsonSerializerOptions); return isValid; } else { throw new Exception(responseMessage.ReasonPhrase); } } catch (Exception ex) { throw new Exception($"Unable to determine if {number} is a valid ECN#, because {ex.Message}"); } } }