From fd117f9a2f224ac564bf32c5714979bc15f5825e Mon Sep 17 00:00:00 2001 From: cryptooda Date: Fri, 18 Jul 2025 19:34:16 +0700 Subject: [PATCH] Delete backtest by request id --- src/Managing.Api/Controllers/BacktestController.cs | 12 +++++++++++- .../Repositories/IBacktestRepository.cs | 1 + .../Services/IBacktester.cs | 1 + src/Managing.Application/Backtesting/Backtester.cs | 14 ++++++++++++++ .../BacktestRepository.cs | 12 ++++++++++++ 5 files changed, 39 insertions(+), 1 deletion(-) diff --git a/src/Managing.Api/Controllers/BacktestController.cs b/src/Managing.Api/Controllers/BacktestController.cs index 77eec85..4260c76 100644 --- a/src/Managing.Api/Controllers/BacktestController.cs +++ b/src/Managing.Api/Controllers/BacktestController.cs @@ -500,6 +500,7 @@ public class BacktestController : BaseController /// /// Deletes a specific genetic request by ID for the authenticated user. + /// Also deletes all related backtests associated with this genetic request. /// /// The ID of the genetic request to delete. /// An ActionResult indicating the outcome of the operation. @@ -508,8 +509,17 @@ public class BacktestController : BaseController public async Task DeleteGeneticRequest(string id) { var user = await GetUser(); + + // First, delete the genetic request _geneticService.DeleteGeneticRequestByIdForUser(user, id); - return Ok(); + + // Then, delete all related backtests + var backtestsDeleted = _backtester.DeleteBacktestsByRequestId(id); + + return Ok(new { + GeneticRequestDeleted = true, + RelatedBacktestsDeleted = backtestsDeleted + }); } /// diff --git a/src/Managing.Application.Abstractions/Repositories/IBacktestRepository.cs b/src/Managing.Application.Abstractions/Repositories/IBacktestRepository.cs index 5462900..d164a5f 100644 --- a/src/Managing.Application.Abstractions/Repositories/IBacktestRepository.cs +++ b/src/Managing.Application.Abstractions/Repositories/IBacktestRepository.cs @@ -14,4 +14,5 @@ public interface IBacktestRepository void DeleteBacktestByIdForUser(User user, string id); void DeleteBacktestsByIdsForUser(User user, IEnumerable ids); void DeleteAllBacktestsForUser(User user); + void DeleteBacktestsByRequestId(string requestId); } \ No newline at end of file diff --git a/src/Managing.Application.Abstractions/Services/IBacktester.cs b/src/Managing.Application.Abstractions/Services/IBacktester.cs index 01b631a..9192d77 100644 --- a/src/Managing.Application.Abstractions/Services/IBacktester.cs +++ b/src/Managing.Application.Abstractions/Services/IBacktester.cs @@ -59,6 +59,7 @@ namespace Managing.Application.Abstractions.Services bool DeleteBacktestByUser(User user, string id); bool DeleteBacktestsByIdsForUser(User user, IEnumerable ids); bool DeleteBacktestsByUser(User user); + bool DeleteBacktestsByRequestId(string requestId); (IEnumerable Backtests, int TotalCount) GetBacktestsByUserPaginated(User user, int page, int pageSize, string sortBy = "score", string sortOrder = "desc"); diff --git a/src/Managing.Application/Backtesting/Backtester.cs b/src/Managing.Application/Backtesting/Backtester.cs index 031081d..94ec5f6 100644 --- a/src/Managing.Application/Backtesting/Backtester.cs +++ b/src/Managing.Application/Backtesting/Backtester.cs @@ -552,6 +552,20 @@ namespace Managing.Application.Backtesting } } + public bool DeleteBacktestsByRequestId(string requestId) + { + try + { + _backtestRepository.DeleteBacktestsByRequestId(requestId); + return true; + } + catch (Exception ex) + { + _logger.LogError(ex, "Failed to delete backtests for request ID {RequestId}", requestId); + return false; + } + } + public (IEnumerable Backtests, int TotalCount) GetBacktestsByUserPaginated(User user, int page, int pageSize, string sortBy = "score", string sortOrder = "desc") { diff --git a/src/Managing.Infrastructure.Database/BacktestRepository.cs b/src/Managing.Infrastructure.Database/BacktestRepository.cs index 2634926..e0782f7 100644 --- a/src/Managing.Infrastructure.Database/BacktestRepository.cs +++ b/src/Managing.Infrastructure.Database/BacktestRepository.cs @@ -212,6 +212,18 @@ public class BacktestRepository : IBacktestRepository } } + public void DeleteBacktestsByRequestId(string requestId) + { + var backtests = _backtestRepository.AsQueryable() + .Where(b => b.RequestId == requestId) + .ToList(); + + foreach (var backtest in backtests) + { + _backtestRepository.DeleteById(backtest.Id.ToString()); + } + } + public (IEnumerable Backtests, int TotalCount) GetBacktestsByUserPaginated(User user, int page, int pageSize, string sortBy = "score", string sortOrder = "desc") {