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")
{