feat: ajustes

This commit is contained in:
Jean Gatto
2022-06-23 14:33:57 -03:00
parent ed00620c4b
commit 6998e064be
4 changed files with 23 additions and 18 deletions
@@ -1,9 +0,0 @@
using System;
using System.Threading.Tasks;
namespace Shop.Core.Interfaces;
public interface IDataBaseTransaction
{
Task ExecuteAsync(Func<Task> action);
}
+10
View File
@@ -0,0 +1,10 @@
using System;
using System.Threading;
using System.Threading.Tasks;
namespace Shop.Core.Interfaces;
public interface ITransaction
{
Task ExecuteAsync(Func<Task> action, CancellationToken cancellationToken = default);
}
@@ -7,9 +7,9 @@ namespace Shop.Infrastructure.Behaviors;
public class TransactionBehaviour<TRequest, TResponse> : IPipelineBehavior<TRequest, TResponse> where TRequest : IRequest<TResponse>
{
private readonly IDataBaseTransaction _dbTransaction;
private readonly ITransaction _dbTransaction;
public TransactionBehaviour(IDataBaseTransaction dbTransaction) => _dbTransaction = dbTransaction;
public TransactionBehaviour(ITransaction dbTransaction) => _dbTransaction = dbTransaction;
public async Task<TResponse> Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate<TResponse> next)
{
@@ -1,5 +1,6 @@
using System;
using System.Data;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
@@ -7,7 +8,7 @@ using Shop.Core.Interfaces;
namespace Shop.Infrastructure.Data;
public class ShopContextTransaction : IDataBaseTransaction
public class ShopContextTransaction : ITransaction
{
private readonly ShopContext _dbContext;
private readonly ILogger<ShopContextTransaction> _logger;
@@ -18,13 +19,16 @@ public class ShopContextTransaction : IDataBaseTransaction
_logger = logger;
}
public async Task ExecuteAsync(Func<Task> action)
public async Task ExecuteAsync(Func<Task> action, CancellationToken cancellationToken = default)
{
if (action == null)
throw new ArgumentNullException(nameof(action));
var strategy = _dbContext.Database.CreateExecutionStrategy();
await strategy.ExecuteAsync(async () =>
{
var transaction = await _dbContext.Database.BeginTransactionAsync(IsolationLevel.ReadCommitted);
var transaction = await _dbContext.Database.BeginTransactionAsync(IsolationLevel.ReadCommitted, cancellationToken);
_logger.LogInformation("----- Begin transaction {TransactionId}", transaction.TransactionId);
@@ -32,9 +36,9 @@ public class ShopContextTransaction : IDataBaseTransaction
try
{
var rowsAffected = await _dbContext.SaveChangesAsync();
var rowsAffected = await _dbContext.SaveChangesAsync(cancellationToken);
await transaction.CommitAsync();
await transaction.CommitAsync(cancellationToken);
_logger.LogInformation("----- Commit transaction {TransactionId}, row(s) affected {RowsAffected}", transaction.TransactionId, rowsAffected);
}
@@ -42,7 +46,7 @@ public class ShopContextTransaction : IDataBaseTransaction
{
_logger.LogError(ex, "An unexpected exception occurred while committing the transaction {TransactionId}", transaction.TransactionId);
await transaction.RollbackAsync();
await transaction.RollbackAsync(cancellationToken);
throw;
}
@@ -52,4 +56,4 @@ public class ShopContextTransaction : IDataBaseTransaction
}
});
}
}
}