86 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
		
		
			
		
	
	
			86 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
|  | 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; | ||
|  | 
 | ||
|  | 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; | ||
|  |     } | ||
|  | 
 | ||
|  |     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"); | ||
|  | 
 | ||
|  |         // Construimos la URL con todos los parámetros requeridos. Usamos categoría 5 (Diputados) como ejemplo. | ||
|  |         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); | ||
|  | 
 | ||
|  |         if (!response.IsSuccessStatusCode) | ||
|  |         { | ||
|  |             return null; | ||
|  |         } | ||
|  | 
 | ||
|  |         return await response.Content.ReadFromJsonAsync<ResultadosDto>(); | ||
|  |     } | ||
|  | } |