| 
									
										
										
										
											2025-08-14 15:27:45 -03:00
										 |  |  | using Elecciones.Core.DTOs; | 
					
						
							|  |  |  | using Microsoft.Extensions.Configuration; | 
					
						
							|  |  |  | using System.Collections.Generic; | 
					
						
							|  |  |  | using System.Net.Http; | 
					
						
							|  |  |  | using System.Net.Http.Json; | 
					
						
							|  |  |  | using System.Threading.Tasks; | 
					
						
							| 
									
										
										
										
											2025-08-15 17:31:51 -03:00
										 |  |  | using static Elecciones.Core.DTOs.BancaDto; | 
					
						
							| 
									
										
										
										
											2025-08-14 15:27:45 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | namespace Elecciones.Infrastructure.Services; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | public class ElectoralApiService : IElectoralApiService | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     private readonly IHttpClientFactory _httpClientFactory; | 
					
						
							|  |  |  |     private readonly IConfiguration _configuration; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public ElectoralApiService(IHttpClientFactory httpClientFactory, IConfiguration configuration) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         _httpClientFactory = httpClientFactory; | 
					
						
							|  |  |  |         _configuration = configuration; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-08-15 17:31:51 -03:00
										 |  |  |     // --- MÉTODOS DE LA INTERFAZ --- | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-08-14 15:27:45 -03:00
										 |  |  |     public async Task<string?> GetAuthTokenAsync() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         var client = _httpClientFactory.CreateClient("ElectoralApiClient"); | 
					
						
							|  |  |  |         var username = _configuration["ElectoralApi:Username"]; | 
					
						
							|  |  |  |         var password = _configuration["ElectoralApi:Password"]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password)) return null; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         var request = new HttpRequestMessage(HttpMethod.Get, "/api/createtoken"); | 
					
						
							|  |  |  |         request.Headers.Add("username", username); | 
					
						
							|  |  |  |         request.Headers.Add("password", password); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         var response = await client.SendAsync(request); | 
					
						
							|  |  |  |         if (!response.IsSuccessStatusCode) return null; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         var tokenResponse = await response.Content.ReadFromJsonAsync<TokenResponse>(); | 
					
						
							|  |  |  |         return (tokenResponse is { Success: true, Data.AccessToken: not null }) | 
					
						
							|  |  |  |             ? tokenResponse.Data.AccessToken | 
					
						
							|  |  |  |             : null; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public async Task<List<CatalogoDto>?> GetCatalogoCompletoAsync(string authToken) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         var client = _httpClientFactory.CreateClient("ElectoralApiClient"); | 
					
						
							|  |  |  |         var request = new HttpRequestMessage(HttpMethod.Get, "/api/catalogo/getCatalogo?categoriald=5"); | 
					
						
							|  |  |  |         request.Headers.Add("Authorization", $"Bearer {authToken}"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         var response = await client.SendAsync(request); | 
					
						
							|  |  |  |         return response.IsSuccessStatusCode | 
					
						
							|  |  |  |             ? await response.Content.ReadFromJsonAsync<List<CatalogoDto>>() | 
					
						
							|  |  |  |             : null; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public async Task<List<AgrupacionDto>?> GetAgrupacionesAsync(string authToken, string distritoId, int categoriaId) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         var client = _httpClientFactory.CreateClient("ElectoralApiClient"); | 
					
						
							|  |  |  |         var requestUri = $"/api/catalogo/getAgrupaciones?distritold={distritoId}&categoriald={categoriaId}"; | 
					
						
							|  |  |  |         var request = new HttpRequestMessage(HttpMethod.Get, requestUri); | 
					
						
							|  |  |  |         request.Headers.Add("Authorization", $"Bearer {authToken}"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         var response = await client.SendAsync(request); | 
					
						
							|  |  |  |         return response.IsSuccessStatusCode | 
					
						
							|  |  |  |             ? await response.Content.ReadFromJsonAsync<List<AgrupacionDto>>() | 
					
						
							|  |  |  |             : null; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public async Task<ResultadosDto?> GetResultadosAsync(string authToken, string distritoId, string seccionId, string municipioId) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         var client = _httpClientFactory.CreateClient("ElectoralApiClient"); | 
					
						
							|  |  |  |         var requestUri = $"/api/resultados/getResultados?distritold={distritoId}&seccionld={seccionId}&municipiold={municipioId}&categoriald=5"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         var request = new HttpRequestMessage(HttpMethod.Get, requestUri); | 
					
						
							|  |  |  |         request.Headers.Add("Authorization", $"Bearer {authToken}"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         var response = await client.SendAsync(request); | 
					
						
							| 
									
										
										
										
											2025-08-15 17:31:51 -03:00
										 |  |  |         return response.IsSuccessStatusCode | 
					
						
							|  |  |  |             ? await response.Content.ReadFromJsonAsync<ResultadosDto>() | 
					
						
							|  |  |  |             : null; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public async Task<RepartoBancasDto?> GetBancasAsync(string authToken, string distritoId, string seccionId) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         var client = _httpClientFactory.CreateClient("ElectoralApiClient"); | 
					
						
							|  |  |  |         var requestUri = $"/api/resultados/getBancas?distritold={distritoId}&seccionld={seccionId}&categoriald=5"; | 
					
						
							|  |  |  |         var request = new HttpRequestMessage(HttpMethod.Get, requestUri); | 
					
						
							|  |  |  |         request.Headers.Add("Authorization", $"Bearer {authToken}"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         var response = await client.SendAsync(request); | 
					
						
							|  |  |  |         return response.IsSuccessStatusCode | 
					
						
							|  |  |  |             ? await response.Content.ReadFromJsonAsync<RepartoBancasDto>() | 
					
						
							|  |  |  |             : null; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public async Task<List<string[]>?> GetTelegramasTotalizadosAsync(string authToken, string distritoId, string seccionId) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         var client = _httpClientFactory.CreateClient("ElectoralApiClient"); | 
					
						
							|  |  |  |         var requestUri = $"/api/resultados/getTelegramasTotalizados?distritold={distritoId}&seccionld={seccionId}"; | 
					
						
							|  |  |  |         var request = new HttpRequestMessage(HttpMethod.Get, requestUri); | 
					
						
							|  |  |  |         request.Headers.Add("Authorization", $"Bearer {authToken}"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         var response = await client.SendAsync(request); | 
					
						
							|  |  |  |         return response.IsSuccessStatusCode | 
					
						
							|  |  |  |             ? await response.Content.ReadFromJsonAsync<List<string[]>>() | 
					
						
							|  |  |  |             : null; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public async Task<TelegramaFileDto?> GetTelegramaFileAsync(string authToken, string mesaId) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         var client = _httpClientFactory.CreateClient("ElectoralApiClient"); | 
					
						
							|  |  |  |         var requestUri = $"/api/resultados/getFile?mesald={mesaId}"; | 
					
						
							|  |  |  |         var request = new HttpRequestMessage(HttpMethod.Get, requestUri); | 
					
						
							|  |  |  |         request.Headers.Add("Authorization", $"Bearer {authToken}"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         var response = await client.SendAsync(request); | 
					
						
							|  |  |  |         return response.IsSuccessStatusCode | 
					
						
							|  |  |  |             ? await response.Content.ReadFromJsonAsync<TelegramaFileDto>() | 
					
						
							|  |  |  |             : null; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2025-08-14 15:27:45 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-08-15 17:31:51 -03:00
										 |  |  |     public async Task<ResumenDto?> GetResumenAsync(string authToken, string distritoId) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         var client = _httpClientFactory.CreateClient("ElectoralApiClient"); | 
					
						
							|  |  |  |         var requestUri = $"/api/resultados/getResumen?distritold={distritoId}"; | 
					
						
							|  |  |  |         var request = new HttpRequestMessage(HttpMethod.Get, requestUri); | 
					
						
							|  |  |  |         request.Headers.Add("Authorization", $"Bearer {authToken}"); | 
					
						
							|  |  |  |         var response = await client.SendAsync(request); | 
					
						
							|  |  |  |         return response.IsSuccessStatusCode ? await response.Content.ReadFromJsonAsync<ResumenDto>() : null; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2025-08-14 15:27:45 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-08-15 17:31:51 -03:00
										 |  |  |     public async Task<EstadoRecuentoGeneralDto?> GetEstadoRecuentoGeneralAsync(string authToken, string distritoId) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         var client = _httpClientFactory.CreateClient("ElectoralApiClient"); | 
					
						
							|  |  |  |         var requestUri = $"/api/estados/estadoRecuento?distritold={distritoId}"; | 
					
						
							|  |  |  |         var request = new HttpRequestMessage(HttpMethod.Get, requestUri); | 
					
						
							|  |  |  |         request.Headers.Add("Authorization", $"Bearer {authToken}"); | 
					
						
							|  |  |  |         var response = await client.SendAsync(request); | 
					
						
							|  |  |  |         return response.IsSuccessStatusCode ? await response.Content.ReadFromJsonAsync<EstadoRecuentoGeneralDto>() : null; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public async Task<List<CategoriaDto>?> GetCategoriasAsync(string authToken) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         var client = _httpClientFactory.CreateClient("ElectoralApiClient"); | 
					
						
							|  |  |  |         var request = new HttpRequestMessage(HttpMethod.Get, "/api/catalogo/getCategorias"); | 
					
						
							|  |  |  |         request.Headers.Add("Authorization", $"Bearer {authToken}"); | 
					
						
							|  |  |  |         var response = await client.SendAsync(request); | 
					
						
							|  |  |  |         return response.IsSuccessStatusCode | 
					
						
							|  |  |  |             ? await response.Content.ReadFromJsonAsync<List<CategoriaDto>>() | 
					
						
							|  |  |  |             : null; | 
					
						
							| 
									
										
										
										
											2025-08-14 15:27:45 -03:00
										 |  |  |     } | 
					
						
							|  |  |  | } |