Fix Goteo solo para Telegramas
This commit is contained in:
@@ -7,7 +7,7 @@ using System.Text.Json;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using System.Threading.Tasks;
|
||||
using static Elecciones.Core.DTOs.BancaDto;
|
||||
using System.Threading.RateLimiting;
|
||||
//using System.Threading.RateLimiting;
|
||||
|
||||
namespace Elecciones.Infrastructure.Services;
|
||||
|
||||
@@ -16,312 +16,321 @@ public class ElectoralApiService : IElectoralApiService
|
||||
private readonly IHttpClientFactory _httpClientFactory;
|
||||
private readonly IConfiguration _configuration;
|
||||
private readonly ILogger<ElectoralApiService> _logger;
|
||||
private readonly RateLimiter _rateLimiter;
|
||||
//private readonly RateLimiter _rateLimiter;
|
||||
|
||||
public ElectoralApiService(IHttpClientFactory httpClientFactory,
|
||||
IConfiguration configuration,
|
||||
ILogger<ElectoralApiService> logger,
|
||||
RateLimiter rateLimiter)
|
||||
ILogger<ElectoralApiService> logger)
|
||||
//RateLimiter rateLimiter)
|
||||
{
|
||||
_httpClientFactory = httpClientFactory;
|
||||
_configuration = configuration;
|
||||
_logger = logger;
|
||||
_rateLimiter = rateLimiter;
|
||||
//_rateLimiter = rateLimiter;
|
||||
}
|
||||
|
||||
public async Task<TokenResponse?> GetAuthTokenAsync()
|
||||
{
|
||||
// "Pedir una ficha". Este método ahora devuelve un "lease" (permiso).
|
||||
// Si no hay fichas, esperará aquí automáticamente hasta que se rellene el cubo.
|
||||
using RateLimitLease lease = await _rateLimiter.AcquireAsync(1);
|
||||
/*
|
||||
using RateLimitLease lease = await _rateLimiter.AcquireAsync(1);
|
||||
|
||||
// Si se nos concede el permiso para proceder...
|
||||
if (lease.IsAcquired)
|
||||
{
|
||||
var client = _httpClientFactory.CreateClient("ElectoralApiClient");
|
||||
var username = _configuration["ElectoralApi:Username"];
|
||||
var password = _configuration["ElectoralApi:Password"];
|
||||
if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password)) return null;
|
||||
// Si se nos concede el permiso para proceder...
|
||||
if (lease.IsAcquired)
|
||||
{*/
|
||||
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 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 response = await client.SendAsync(request);
|
||||
if (!response.IsSuccessStatusCode) return null;
|
||||
|
||||
// Ahora esto es válido, porque el método devuelve Task<TokenResponse?>
|
||||
return await response.Content.ReadFromJsonAsync<TokenResponse>();
|
||||
}
|
||||
|
||||
// Si no se pudo obtener un permiso (ej. la cola está llena), devolvemos null.
|
||||
return null;
|
||||
// Ahora esto es válido, porque el método devuelve Task<TokenResponse?>
|
||||
return await response.Content.ReadFromJsonAsync<TokenResponse>();
|
||||
/* }
|
||||
// Si no se pudo obtener un permiso (ej. la cola está llena), devolvemos null.
|
||||
return null;*/
|
||||
}
|
||||
|
||||
public async Task<CatalogoDto?> GetCatalogoAmbitosAsync(string authToken, int categoriaId)
|
||||
{
|
||||
// "Pedir una ficha". Este método ahora devuelve un "lease" (permiso).
|
||||
// Si no hay fichas, esperará aquí automáticamente hasta que se rellene el cubo.
|
||||
using RateLimitLease lease = await _rateLimiter.AcquireAsync(1);
|
||||
/*
|
||||
using RateLimitLease lease = await _rateLimiter.AcquireAsync(1);
|
||||
|
||||
// Si se nos concede el permiso para proceder...
|
||||
if (lease.IsAcquired)
|
||||
{
|
||||
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;
|
||||
}
|
||||
// Si no se pudo obtener un permiso (ej. la cola está llena), devolvemos null.
|
||||
return null;
|
||||
// Si se nos concede el permiso para proceder...
|
||||
if (lease.IsAcquired)
|
||||
{*/
|
||||
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;
|
||||
/* }
|
||||
// Si no se pudo obtener un permiso (ej. la cola está llena), devolvemos null.
|
||||
return null;*/
|
||||
}
|
||||
|
||||
public async Task<List<AgrupacionDto>?> GetAgrupacionesAsync(string authToken, string distritoId, int categoriaId)
|
||||
{
|
||||
// "Pedir una ficha". Este método ahora devuelve un "lease" (permiso).
|
||||
// Si no hay fichas, esperará aquí automáticamente hasta que se rellene el cubo.
|
||||
using RateLimitLease lease = await _rateLimiter.AcquireAsync(1);
|
||||
/*
|
||||
using RateLimitLease lease = await _rateLimiter.AcquireAsync(1);
|
||||
|
||||
// Si se nos concede el permiso para proceder...
|
||||
if (lease.IsAcquired)
|
||||
{
|
||||
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;
|
||||
}
|
||||
// Si no se pudo obtener un permiso (ej. la cola está llena), devolvemos null.
|
||||
return null;
|
||||
// Si se nos concede el permiso para proceder...
|
||||
if (lease.IsAcquired)
|
||||
{*/
|
||||
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;
|
||||
/* }
|
||||
// Si no se pudo obtener un permiso (ej. la cola está llena), devolvemos null.
|
||||
return null;*/
|
||||
}
|
||||
|
||||
public async Task<ResultadosDto?> GetResultadosAsync(string authToken, string distritoId, string seccionId, string? municipioId, int categoriaId)
|
||||
{
|
||||
// "Pedir una ficha". Este método ahora devuelve un "lease" (permiso).
|
||||
// Si no hay fichas, esperará aquí automáticamente hasta que se rellene el cubo.
|
||||
using RateLimitLease lease = await _rateLimiter.AcquireAsync(1);
|
||||
/*
|
||||
using RateLimitLease lease = await _rateLimiter.AcquireAsync(1);
|
||||
|
||||
// Si se nos concede el permiso para proceder...
|
||||
if (lease.IsAcquired)
|
||||
// Si se nos concede el permiso para proceder...
|
||||
if (lease.IsAcquired)
|
||||
{*/
|
||||
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))
|
||||
{
|
||||
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;
|
||||
requestUri += $"&municipioId={municipioId}";
|
||||
}
|
||||
// Si no se pudo obtener un permiso (ej. la cola está llena), devolvemos null.
|
||||
return null;
|
||||
|
||||
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;
|
||||
/* }
|
||||
// Si no se pudo obtener un permiso (ej. la cola está llena), devolvemos null.
|
||||
return null;*/
|
||||
}
|
||||
|
||||
public async Task<RepartoBancasDto?> GetBancasAsync(string authToken, string distritoId, string? seccionProvincialId, int categoriaId)
|
||||
{
|
||||
// "Pedir una ficha". Este método ahora devuelve un "lease" (permiso).
|
||||
// Si no hay fichas, esperará aquí automáticamente hasta que se rellene el cubo.
|
||||
using RateLimitLease lease = await _rateLimiter.AcquireAsync(1);
|
||||
/*
|
||||
using RateLimitLease lease = await _rateLimiter.AcquireAsync(1);
|
||||
|
||||
// Si se nos concede el permiso para proceder...
|
||||
if (lease.IsAcquired)
|
||||
// Si se nos concede el permiso para proceder...
|
||||
if (lease.IsAcquired)
|
||||
{*/
|
||||
var client = _httpClientFactory.CreateClient("ElectoralApiClient");
|
||||
var requestUri = $"/api/resultados/getBancas?distritoId={distritoId}&categoriaId={categoriaId}";
|
||||
|
||||
if (!string.IsNullOrEmpty(seccionProvincialId))
|
||||
{
|
||||
var client = _httpClientFactory.CreateClient("ElectoralApiClient");
|
||||
var requestUri = $"/api/resultados/getBancas?distritoId={distritoId}&categoriaId={categoriaId}";
|
||||
requestUri += $"&seccionProvincialId={seccionProvincialId}";
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(seccionProvincialId))
|
||||
{
|
||||
requestUri += $"&seccionProvincialId={seccionProvincialId}";
|
||||
}
|
||||
var request = new HttpRequestMessage(HttpMethod.Get, requestUri);
|
||||
request.Headers.Add("Authorization", $"Bearer {authToken}");
|
||||
|
||||
var request = new HttpRequestMessage(HttpMethod.Get, requestUri);
|
||||
request.Headers.Add("Authorization", $"Bearer {authToken}");
|
||||
|
||||
HttpResponseMessage response;
|
||||
try
|
||||
{
|
||||
response = await client.SendAsync(request);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// Captura errores de red (ej. la API se cae momentáneamente)
|
||||
_logger.LogError(ex, "La petición HTTP a getBancas falló. URI: {requestUri}", requestUri);
|
||||
return null;
|
||||
}
|
||||
|
||||
// Comprobamos que la respuesta fue exitosa Y que contiene datos antes de intentar leerla.
|
||||
if (response.IsSuccessStatusCode && response.Content?.Headers.ContentLength > 0)
|
||||
{
|
||||
try
|
||||
{
|
||||
// Solo si hay contenido, intentamos deserializar.
|
||||
return await response.Content.ReadFromJsonAsync<RepartoBancasDto>();
|
||||
}
|
||||
catch (JsonException ex)
|
||||
{
|
||||
// Si el contenido no es un JSON válido, lo registramos y devolvemos null.
|
||||
_logger.LogWarning(ex, "La API devolvió una respuesta no-JSON para getBancas. URI: {requestUri}, Status: {statusCode}", requestUri, response.StatusCode);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
else if (!response.IsSuccessStatusCode)
|
||||
{
|
||||
// Si la API devolvió un error HTTP, lo registramos.
|
||||
_logger.LogWarning("La API devolvió un código de error {statusCode} para getBancas. URI: {requestUri}", response.StatusCode, requestUri);
|
||||
}
|
||||
|
||||
// Si la respuesta fue 200 OK pero con cuerpo vacío, o si fue un error HTTP, devolvemos null.
|
||||
HttpResponseMessage response;
|
||||
try
|
||||
{
|
||||
response = await client.SendAsync(request);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// Captura errores de red (ej. la API se cae momentáneamente)
|
||||
_logger.LogError(ex, "La petición HTTP a getBancas falló. URI: {requestUri}", requestUri);
|
||||
return null;
|
||||
}
|
||||
// Si no se pudo obtener un permiso (ej. la cola está llena), devolvemos null.
|
||||
|
||||
// Comprobamos que la respuesta fue exitosa Y que contiene datos antes de intentar leerla.
|
||||
if (response.IsSuccessStatusCode && response.Content?.Headers.ContentLength > 0)
|
||||
{
|
||||
try
|
||||
{
|
||||
// Solo si hay contenido, intentamos deserializar.
|
||||
return await response.Content.ReadFromJsonAsync<RepartoBancasDto>();
|
||||
}
|
||||
catch (JsonException ex)
|
||||
{
|
||||
// Si el contenido no es un JSON válido, lo registramos y devolvemos null.
|
||||
_logger.LogWarning(ex, "La API devolvió una respuesta no-JSON para getBancas. URI: {requestUri}, Status: {statusCode}", requestUri, response.StatusCode);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
else if (!response.IsSuccessStatusCode)
|
||||
{
|
||||
// Si la API devolvió un error HTTP, lo registramos.
|
||||
_logger.LogWarning("La API devolvió un código de error {statusCode} para getBancas. URI: {requestUri}", response.StatusCode, requestUri);
|
||||
}
|
||||
|
||||
// Si la respuesta fue 200 OK pero con cuerpo vacío, o si fue un error HTTP, devolvemos null.
|
||||
return null;
|
||||
/* }
|
||||
// Si no se pudo obtener un permiso (ej. la cola está llena), devolvemos null.
|
||||
return null;*/
|
||||
}
|
||||
|
||||
public async Task<List<string>?> GetTelegramasTotalizadosAsync(string authToken, string distritoId, string seccionId, int? categoriaId = null)
|
||||
{
|
||||
// "Pedir una ficha". Este método ahora devuelve un "lease" (permiso).
|
||||
// Si no hay fichas, esperará aquí automáticamente hasta que se rellene el cubo.
|
||||
using RateLimitLease lease = await _rateLimiter.AcquireAsync(1);
|
||||
/*
|
||||
using RateLimitLease lease = await _rateLimiter.AcquireAsync(1);
|
||||
|
||||
// Si se nos concede el permiso para proceder...
|
||||
if (lease.IsAcquired)
|
||||
// Si se nos concede el permiso para proceder...
|
||||
if (lease.IsAcquired)
|
||||
{*/
|
||||
var client = _httpClientFactory.CreateClient("ElectoralApiClient");
|
||||
var requestUri = $"/api/resultados/getTelegramasTotalizados?distritoId={distritoId}&seccionId={seccionId}";
|
||||
|
||||
if (categoriaId.HasValue)
|
||||
{
|
||||
var client = _httpClientFactory.CreateClient("ElectoralApiClient");
|
||||
var requestUri = $"/api/resultados/getTelegramasTotalizados?distritoId={distritoId}&seccionId={seccionId}";
|
||||
|
||||
if (categoriaId.HasValue)
|
||||
{
|
||||
requestUri += $"&categoriaId={categoriaId.Value}";
|
||||
}
|
||||
|
||||
var request = new HttpRequestMessage(HttpMethod.Get, requestUri);
|
||||
request.Headers.Add("Authorization", $"Bearer {authToken}");
|
||||
var response = await client.SendAsync(request);
|
||||
|
||||
// Ahora deserializamos al tipo correcto: List<string>
|
||||
return response.IsSuccessStatusCode ? await response.Content.ReadFromJsonAsync<List<string>>() : null;
|
||||
requestUri += $"&categoriaId={categoriaId.Value}";
|
||||
}
|
||||
// Si no se pudo obtener un permiso (ej. la cola está llena), devolvemos null.
|
||||
return null;
|
||||
|
||||
var request = new HttpRequestMessage(HttpMethod.Get, requestUri);
|
||||
request.Headers.Add("Authorization", $"Bearer {authToken}");
|
||||
var response = await client.SendAsync(request);
|
||||
|
||||
// Ahora deserializamos al tipo correcto: List<string>
|
||||
return response.IsSuccessStatusCode ? await response.Content.ReadFromJsonAsync<List<string>>() : null;
|
||||
/* }
|
||||
// Si no se pudo obtener un permiso (ej. la cola está llena), devolvemos null.
|
||||
return null;*/
|
||||
}
|
||||
|
||||
public async Task<TelegramaFileDto?> GetTelegramaFileAsync(string authToken, string mesaId)
|
||||
{
|
||||
// "Pedir una ficha". Este método ahora devuelve un "lease" (permiso).
|
||||
// Si no hay fichas, esperará aquí automáticamente hasta que se rellene el cubo.
|
||||
using RateLimitLease lease = await _rateLimiter.AcquireAsync(1);
|
||||
/*
|
||||
using RateLimitLease lease = await _rateLimiter.AcquireAsync(1);
|
||||
|
||||
// Si se nos concede el permiso para proceder...
|
||||
if (lease.IsAcquired)
|
||||
// Si se nos concede el permiso para proceder...
|
||||
if (lease.IsAcquired)
|
||||
{*/
|
||||
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}");
|
||||
|
||||
HttpResponseMessage response;
|
||||
try
|
||||
{
|
||||
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}");
|
||||
|
||||
HttpResponseMessage response;
|
||||
try
|
||||
{
|
||||
response = await client.SendAsync(request);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "La petición HTTP a getFile falló para la mesa {mesaId}", mesaId);
|
||||
return null;
|
||||
}
|
||||
|
||||
if (response.IsSuccessStatusCode && response.Content?.Headers.ContentLength > 0)
|
||||
{
|
||||
try
|
||||
{
|
||||
return await response.Content.ReadFromJsonAsync<TelegramaFileDto>();
|
||||
}
|
||||
catch (JsonException ex)
|
||||
{
|
||||
// Si la deserialización falla, ahora lo sabremos exactamente.
|
||||
_logger.LogWarning(ex, "La API devolvió una respuesta no-JSON para la mesa {mesaId}. Status: {statusCode}", mesaId, response.StatusCode);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
else if (!response.IsSuccessStatusCode)
|
||||
{
|
||||
_logger.LogWarning("La API devolvió un código de error {statusCode} para la mesa {mesaId}", response.StatusCode, mesaId);
|
||||
}
|
||||
// Si la respuesta fue exitosa pero sin contenido, no es necesario loguearlo como un error,
|
||||
// simplemente devolvemos null y el Worker lo ignorará.
|
||||
|
||||
response = await client.SendAsync(request);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "La petición HTTP a getFile falló para la mesa {mesaId}", mesaId);
|
||||
return null;
|
||||
}
|
||||
// Si no se pudo obtener un permiso (ej. la cola está llena), devolvemos null.
|
||||
|
||||
if (response.IsSuccessStatusCode && response.Content?.Headers.ContentLength > 0)
|
||||
{
|
||||
try
|
||||
{
|
||||
return await response.Content.ReadFromJsonAsync<TelegramaFileDto>();
|
||||
}
|
||||
catch (JsonException ex)
|
||||
{
|
||||
// Si la deserialización falla, ahora lo sabremos exactamente.
|
||||
_logger.LogWarning(ex, "La API devolvió una respuesta no-JSON para la mesa {mesaId}. Status: {statusCode}", mesaId, response.StatusCode);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
else if (!response.IsSuccessStatusCode)
|
||||
{
|
||||
_logger.LogWarning("La API devolvió un código de error {statusCode} para la mesa {mesaId}", response.StatusCode, mesaId);
|
||||
}
|
||||
// Si la respuesta fue exitosa pero sin contenido, no es necesario loguearlo como un error,
|
||||
// simplemente devolvemos null y el Worker lo ignorará.
|
||||
|
||||
return null;
|
||||
/* }
|
||||
// Si no se pudo obtener un permiso (ej. la cola está llena), devolvemos null.
|
||||
return null;*/
|
||||
}
|
||||
|
||||
public async Task<ResumenDto?> GetResumenAsync(string authToken, string distritoId)
|
||||
{
|
||||
// "Pedir una ficha". Este método ahora devuelve un "lease" (permiso).
|
||||
// Si no hay fichas, esperará aquí automáticamente hasta que se rellene el cubo.
|
||||
using RateLimitLease lease = await _rateLimiter.AcquireAsync(1);
|
||||
/*
|
||||
using RateLimitLease lease = await _rateLimiter.AcquireAsync(1);
|
||||
|
||||
// Si se nos concede el permiso para proceder...
|
||||
if (lease.IsAcquired)
|
||||
{
|
||||
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;
|
||||
}
|
||||
// Si no se pudo obtener un permiso (ej. la cola está llena), devolvemos null.
|
||||
return null;
|
||||
// Si se nos concede el permiso para proceder...
|
||||
if (lease.IsAcquired)
|
||||
{*/
|
||||
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;
|
||||
/* }
|
||||
// Si no se pudo obtener un permiso (ej. la cola está llena), devolvemos null.
|
||||
return null;*/
|
||||
}
|
||||
|
||||
public async Task<EstadoRecuentoGeneralDto?> GetEstadoRecuentoGeneralAsync(string authToken, string distritoId, int categoriaId)
|
||||
{
|
||||
// "Pedir una ficha". Este método ahora devuelve un "lease" (permiso).
|
||||
// Si no hay fichas, esperará aquí automáticamente hasta que se rellene el cubo.
|
||||
using RateLimitLease lease = await _rateLimiter.AcquireAsync(1);
|
||||
/*
|
||||
using RateLimitLease lease = await _rateLimiter.AcquireAsync(1);
|
||||
|
||||
// Si se nos concede el permiso para proceder...
|
||||
if (lease.IsAcquired)
|
||||
{
|
||||
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;
|
||||
}
|
||||
// Si no se pudo obtener un permiso (ej. la cola está llena), devolvemos null.
|
||||
return null;
|
||||
// Si se nos concede el permiso para proceder...
|
||||
if (lease.IsAcquired)
|
||||
{*/
|
||||
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;
|
||||
/* }
|
||||
// Si no se pudo obtener un permiso (ej. la cola está llena), devolvemos null.
|
||||
return null;*/
|
||||
}
|
||||
|
||||
public async Task<List<CategoriaDto>?> GetCategoriasAsync(string authToken)
|
||||
{
|
||||
// "Pedir una ficha". Este método ahora devuelve un "lease" (permiso).
|
||||
// Si no hay fichas, esperará aquí automáticamente hasta que se rellene el cubo.
|
||||
using RateLimitLease lease = await _rateLimiter.AcquireAsync(1);
|
||||
/*
|
||||
using RateLimitLease lease = await _rateLimiter.AcquireAsync(1);
|
||||
|
||||
// Si se nos concede el permiso para proceder...
|
||||
if (lease.IsAcquired)
|
||||
{
|
||||
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;
|
||||
}
|
||||
// Si no se pudo obtener un permiso (ej. la cola está llena), devolvemos null.
|
||||
return null;
|
||||
// Si se nos concede el permiso para proceder...
|
||||
if (lease.IsAcquired)
|
||||
{*/
|
||||
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;
|
||||
/* }
|
||||
// Si no se pudo obtener un permiso (ej. la cola está llena), devolvemos null.
|
||||
return null;*/
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user