denuncias
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user