Fix Archivos Telegramas en Blanco
This commit is contained in:
		| @@ -3,6 +3,8 @@ using Microsoft.Extensions.Configuration; | |||||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||||
| using System.Net.Http; | using System.Net.Http; | ||||||
| using System.Net.Http.Json; | using System.Net.Http.Json; | ||||||
|  | using System.Text.Json; | ||||||
|  | using Microsoft.Extensions.Logging; | ||||||
| using System.Threading.Tasks; | using System.Threading.Tasks; | ||||||
| using static Elecciones.Core.DTOs.BancaDto; | using static Elecciones.Core.DTOs.BancaDto; | ||||||
|  |  | ||||||
| @@ -12,11 +14,15 @@ public class ElectoralApiService : IElectoralApiService | |||||||
| { | { | ||||||
|     private readonly IHttpClientFactory _httpClientFactory; |     private readonly IHttpClientFactory _httpClientFactory; | ||||||
|     private readonly IConfiguration _configuration; |     private readonly IConfiguration _configuration; | ||||||
|  |     private readonly ILogger<ElectoralApiService> _logger; | ||||||
|  |  | ||||||
|     public ElectoralApiService(IHttpClientFactory httpClientFactory, IConfiguration configuration) |     public ElectoralApiService(IHttpClientFactory httpClientFactory, | ||||||
|  |     IConfiguration configuration, | ||||||
|  |         ILogger<ElectoralApiService> logger) | ||||||
|     { |     { | ||||||
|         _httpClientFactory = httpClientFactory; |         _httpClientFactory = httpClientFactory; | ||||||
|         _configuration = configuration; |         _configuration = configuration; | ||||||
|  |         _logger = logger; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public async Task<string?> GetAuthTokenAsync() |     public async Task<string?> GetAuthTokenAsync() | ||||||
| @@ -113,8 +119,39 @@ public class ElectoralApiService : IElectoralApiService | |||||||
|         var requestUri = $"/api/resultados/getFile?mesaId={mesaId}"; |         var requestUri = $"/api/resultados/getFile?mesaId={mesaId}"; | ||||||
|         var request = new HttpRequestMessage(HttpMethod.Get, requestUri); |         var request = new HttpRequestMessage(HttpMethod.Get, requestUri); | ||||||
|         request.Headers.Add("Authorization", $"Bearer {authToken}"); |         request.Headers.Add("Authorization", $"Bearer {authToken}"); | ||||||
|         var response = await client.SendAsync(request); |  | ||||||
|         return response.IsSuccessStatusCode ? await response.Content.ReadFromJsonAsync<TelegramaFileDto>() : null; |         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á. | ||||||
|  |  | ||||||
|  |         return null; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public async Task<ResumenDto?> GetResumenAsync(string authToken, string distritoId) |     public async Task<ResumenDto?> GetResumenAsync(string authToken, string distritoId) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user