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 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    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 ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-16 13:30:05 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        var  request  =  new  HttpRequestMessage ( HttpMethod . Get ,  "/api/createtoken/" ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-14 15:27:45 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        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 > ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-16 13:30:05 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  ( tokenResponse  is  {  Success :  true ,  Data . AccessToken :  not  null  } )  ?  tokenResponse . Data . AccessToken  :  null ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-14 15:27:45 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-08-16 12:00:51 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  async  Task < CatalogoDto ? >  GetCatalogoAmbitosAsync ( string  authToken ,  int  categoriaId ) 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-14 15:27:45 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  client  =  _httpClientFactory . CreateClient ( "ElectoralApiClient" ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-16 11:47:10 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        var  request  =  new  HttpRequestMessage ( HttpMethod . Get ,  $"/api/catalogo/getCatalogo?categoriaId={categoriaId}" ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-14 15:27:45 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        request . Headers . Add ( "Authorization" ,  $"Bearer {authToken}" ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  response  =  await  client . SendAsync ( request ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-16 13:30:05 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  response . IsSuccessStatusCode  ?  await  response . Content . ReadFromJsonAsync < CatalogoDto > ( )  :  null ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-14 15:27:45 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    public  async  Task < List < AgrupacionDto > ? >  GetAgrupacionesAsync ( string  authToken ,  string  distritoId ,  int  categoriaId ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  client  =  _httpClientFactory . CreateClient ( "ElectoralApiClient" ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-16 13:30:05 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        var  requestUri  =  $"/api/catalogo/getAgrupaciones?distritoId={distritoId}&categoriaId={categoriaId}" ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-14 15:27:45 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        var  request  =  new  HttpRequestMessage ( HttpMethod . Get ,  requestUri ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        request . Headers . Add ( "Authorization" ,  $"Bearer {authToken}" ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  response  =  await  client . SendAsync ( request ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-16 13:30:05 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  response . IsSuccessStatusCode  ?  await  response . Content . ReadFromJsonAsync < List < AgrupacionDto > > ( )  :  null ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-14 15:27:45 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    public  async  Task < ResultadosDto ? >  GetResultadosAsync ( string  authToken ,  string  distritoId ,  string  seccionId ,  string  municipioId ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  client  =  _httpClientFactory . CreateClient ( "ElectoralApiClient" ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-16 13:30:05 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        var  requestUri  =  $"/api/resultados/getResultados?distritoId={distritoId}&seccionId={seccionId}&municipioId={municipioId}&categoriaId=5" ;  // OJO: La categoría está fija 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-14 15:27:45 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        var  request  =  new  HttpRequestMessage ( HttpMethod . Get ,  requestUri ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        request . Headers . Add ( "Authorization" ,  $"Bearer {authToken}" ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  response  =  await  client . SendAsync ( request ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-16 13:30:05 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  response . IsSuccessStatusCode  ?  await  response . Content . ReadFromJsonAsync < ResultadosDto > ( )  :  null ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-15 17:31:51 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    public  async  Task < RepartoBancasDto ? >  GetBancasAsync ( string  authToken ,  string  distritoId ,  string  seccionId ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  client  =  _httpClientFactory . CreateClient ( "ElectoralApiClient" ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-16 13:30:05 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        var  requestUri  =  $"/api/resultados/getBancas?distritoId={distritoId}&seccionId={seccionId}&categoriaId=5" ;  // OJO: La categoría está fija 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-15 17:31:51 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        var  request  =  new  HttpRequestMessage ( HttpMethod . Get ,  requestUri ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        request . Headers . Add ( "Authorization" ,  $"Bearer {authToken}" ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  response  =  await  client . SendAsync ( request ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-16 11:39:15 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  response . IsSuccessStatusCode  ?  await  response . Content . ReadFromJsonAsync < RepartoBancasDto > ( )  :  null ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-15 17:31:51 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    public  async  Task < List < string [ ] > ? >  GetTelegramasTotalizadosAsync ( string  authToken ,  string  distritoId ,  string  seccionId ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  client  =  _httpClientFactory . CreateClient ( "ElectoralApiClient" ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-16 13:30:05 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        var  requestUri  =  $"/api/resultados/getTelegramasTotalizados?distritoId={distritoId}&seccionId={seccionId}" ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-15 17:31:51 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        var  request  =  new  HttpRequestMessage ( HttpMethod . Get ,  requestUri ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        request . Headers . Add ( "Authorization" ,  $"Bearer {authToken}" ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  response  =  await  client . SendAsync ( request ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-16 11:39:15 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  response . IsSuccessStatusCode  ?  await  response . Content . ReadFromJsonAsync < List < string [ ] > > ( )  :  null ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-15 17:31:51 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    public  async  Task < TelegramaFileDto ? >  GetTelegramaFileAsync ( string  authToken ,  string  mesaId ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  client  =  _httpClientFactory . CreateClient ( "ElectoralApiClient" ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-16 13:30:05 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        var  requestUri  =  $"/api/resultados/getFile?mesaId={mesaId}" ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-15 17:31:51 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        var  request  =  new  HttpRequestMessage ( HttpMethod . Get ,  requestUri ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        request . Headers . Add ( "Authorization" ,  $"Bearer {authToken}" ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        var  response  =  await  client . SendAsync ( request ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-16 11:39:15 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  response . IsSuccessStatusCode  ?  await  response . Content . ReadFromJsonAsync < TelegramaFileDto > ( )  :  null ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-15 17:31:51 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											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" ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-16 13:30:05 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        var  requestUri  =  $"/api/resultados/getResumen?distritoId={distritoId}" ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-15 17:31:51 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        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" ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-16 13:30:05 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        var  requestUri  =  $"/api/estados/estadoRecuento?distritoId={distritoId}" ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-15 17:31:51 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        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 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-16 11:39:15 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  response . IsSuccessStatusCode  ?  await  response . Content . ReadFromJsonAsync < List < CategoriaDto > > ( )  :  null ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-14 15:27:45 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}