135 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			135 lines
		
	
	
		
			7.1 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;
 | |
| using static Elecciones.Core.DTOs.BancaDto;
 | |
| 
 | |
| 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<CatalogoDto?> GetCatalogoAmbitosAsync(string authToken, int categoriaId)
 | |
|     {
 | |
|         var client = _httpClientFactory.CreateClient("ElectoralApiClient");
 | |
|         var request = new HttpRequestMessage(HttpMethod.Get, $"/api/catalogo/getCatalogo?categoriaId={categoriaId}");
 | |
|         request.Headers.Add("Authorization", $"Bearer {authToken}");
 | |
|         var response = await client.SendAsync(request);
 | |
|         return response.IsSuccessStatusCode ? await response.Content.ReadFromJsonAsync<CatalogoDto>() : null;
 | |
|     }
 | |
| 
 | |
|     public async Task<List<AgrupacionDto>?> GetAgrupacionesAsync(string authToken, string distritoId, int categoriaId)
 | |
|     {
 | |
|         var client = _httpClientFactory.CreateClient("ElectoralApiClient");
 | |
|         var requestUri = $"/api/catalogo/getAgrupaciones?distritoId={distritoId}&categoriaId={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, int categoriaId)
 | |
|     {
 | |
|         var client = _httpClientFactory.CreateClient("ElectoralApiClient");
 | |
| 
 | |
|         // Construimos la URL base
 | |
|         var requestUri = $"/api/resultados/getResultados?distritoId={distritoId}&seccionId={seccionId}&categoriaId={categoriaId}";
 | |
| 
 | |
|         // Añadimos el municipioId a la URL SÓLO si no es nulo o vacío
 | |
|         if (!string.IsNullOrEmpty(municipioId))
 | |
|         {
 | |
|             requestUri += $"&municipioId={municipioId}";
 | |
|         }
 | |
| 
 | |
|         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<ResultadosDto>() : null;
 | |
|     }
 | |
| 
 | |
|     public async Task<RepartoBancasDto?> GetBancasAsync(string authToken, string distritoId, string seccionId, int categoriaId)
 | |
|     {
 | |
|         var client = _httpClientFactory.CreateClient("ElectoralApiClient");
 | |
|         // Usamos la categoriaId recibida en lugar de una fija
 | |
|         var requestUri = $"/api/resultados/getBancas?distritoId={distritoId}&seccionId={seccionId}&categoriaId={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<RepartoBancasDto>() : null;
 | |
|     }
 | |
| 
 | |
|     public async Task<List<string[]>?> GetTelegramasTotalizadosAsync(string authToken, string distritoId, string seccionId)
 | |
|     {
 | |
|         var client = _httpClientFactory.CreateClient("ElectoralApiClient");
 | |
|         var requestUri = $"/api/resultados/getTelegramasTotalizados?distritoId={distritoId}&seccionId={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?mesaId={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;
 | |
|     }
 | |
| 
 | |
|     public async Task<ResumenDto?> GetResumenAsync(string authToken, string distritoId)
 | |
|     {
 | |
|         var client = _httpClientFactory.CreateClient("ElectoralApiClient");
 | |
|         var requestUri = $"/api/resultados/getResumen?distritoId={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;
 | |
|     }
 | |
| 
 | |
|     public async Task<EstadoRecuentoGeneralDto?> GetEstadoRecuentoGeneralAsync(string authToken, string distritoId, int categoriaId)
 | |
|     {
 | |
|         var client = _httpClientFactory.CreateClient("ElectoralApiClient");
 | |
|         // La URL ahora usa el parámetro 'categoriaId' que se recibe
 | |
|         var requestUri = $"/api/estados/estadoRecuento?distritoId={distritoId}&categoriaId={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<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;
 | |
|     }
 | |
| } |