denuncias

This commit is contained in:
2026-06-08 12:58:30 +02:00
parent 8163928623
commit ff2867d916
51 changed files with 4012 additions and 766 deletions

View File

@@ -1,4 +1,5 @@
using System.Globalization;
using System.Data;
using GestionaDenuncias.Shared.Models;
using MySqlConnector;
@@ -84,10 +85,11 @@ public sealed class InboxTrackingService : IInboxTrackingService
}
catch
{
await transaction.RollbackAsync(cancellationToken);
await SafeRollbackAsync(transaction, cancellationToken);
throw;
}
await EnsureConnectionOpenAsync(connection, cancellationToken);
var metadata = await LoadMetadataAsync(connection, userId, reportList.Select(r => r.Id).ToList(), cancellationToken);
return reportList
@@ -132,10 +134,11 @@ public sealed class InboxTrackingService : IInboxTrackingService
}
catch
{
await transaction.RollbackAsync(cancellationToken);
await SafeRollbackAsync(transaction, cancellationToken);
throw;
}
await EnsureConnectionOpenAsync(connection, cancellationToken);
var metadata = await LoadMetadataAsync(connection, userId, [report.Id], cancellationToken);
if (metadata.TryGetValue(report.Id, out var meta) && meta.LockedByAnotherUser)
{
@@ -254,7 +257,7 @@ public sealed class InboxTrackingService : IInboxTrackingService
}
catch
{
await transaction.RollbackAsync(cancellationToken);
await SafeRollbackAsync(transaction, cancellationToken);
throw;
}
}
@@ -386,6 +389,8 @@ public sealed class InboxTrackingService : IInboxTrackingService
List<string> reportIds,
CancellationToken cancellationToken)
{
await EnsureConnectionOpenAsync(connection, cancellationToken);
var metadata = new Dictionary<string, ReportMetadata>(StringComparer.OrdinalIgnoreCase);
if (reportIds.Count == 0)
{
@@ -462,6 +467,34 @@ public sealed class InboxTrackingService : IInboxTrackingService
return connection;
}
private static async Task EnsureConnectionOpenAsync(
MySqlConnection connection,
CancellationToken cancellationToken)
{
if (connection.State == ConnectionState.Open)
{
return;
}
await connection.OpenAsync(cancellationToken);
await using var timeZoneCommand = new MySqlCommand("SET time_zone = '+00:00';", connection);
await timeZoneCommand.ExecuteNonQueryAsync(cancellationToken);
}
private async Task SafeRollbackAsync(
MySqlTransaction transaction,
CancellationToken cancellationToken)
{
try
{
await transaction.RollbackAsync(cancellationToken);
}
catch
{
// No dejamos que un rollback sobre una conexion ya cerrada oculte el error real.
}
}
private static object ToDbString(string? value)
{
return string.IsNullOrWhiteSpace(value) ? DBNull.Value : value;