Add front for bundle

This commit is contained in:
2025-07-21 18:16:01 +07:00
parent 6f49f2659f
commit a32e9c33a8
7 changed files with 623 additions and 20 deletions

View File

@@ -411,21 +411,20 @@ public class BacktestController : BaseController
/// <param name="name">Display name for the bundle (required).</param>
/// <returns>The bundle backtest request with ID for tracking progress.</returns>
[HttpPost]
[Route("Bundle")]
public async Task<ActionResult<BundleBacktestRequest>> RunBundle([FromBody] List<RunBacktestRequest> requests,
[FromQuery] string name)
[Route("BacktestBundle")]
public async Task<ActionResult<BundleBacktestRequest>> RunBundle([FromBody] RunBundleBacktestRequest request)
{
if (requests == null || !requests.Any())
if (request?.Requests == null || !request.Requests.Any())
{
return BadRequest("At least one backtest request is required");
}
if (requests.Count > 10)
if (request.Requests.Count > 10)
{
return BadRequest("Maximum of 10 backtests allowed per bundle request");
}
if (string.IsNullOrWhiteSpace(name))
if (string.IsNullOrWhiteSpace(request.Name))
{
return BadRequest("Bundle name is required");
}
@@ -435,24 +434,24 @@ public class BacktestController : BaseController
var user = await GetUser();
// Validate all requests before creating the bundle
foreach (var request in requests)
foreach (var req in request.Requests)
{
if (request?.Config == null)
if (req?.Config == null)
{
return BadRequest("Invalid request: Configuration is required");
}
if (string.IsNullOrEmpty(request.Config.AccountName))
if (string.IsNullOrEmpty(req.Config.AccountName))
{
return BadRequest("Invalid request: Account name is required");
}
if (string.IsNullOrEmpty(request.Config.ScenarioName) && request.Config.Scenario == null)
if (string.IsNullOrEmpty(req.Config.ScenarioName) && req.Config.Scenario == null)
{
return BadRequest("Invalid request: Either scenario name or scenario object is required");
}
if (string.IsNullOrEmpty(request.Config.MoneyManagementName) && request.Config.MoneyManagement == null)
if (string.IsNullOrEmpty(req.Config.MoneyManagementName) && req.Config.MoneyManagement == null)
{
return BadRequest(
"Invalid request: Either money management name or money management object is required");
@@ -463,16 +462,15 @@ public class BacktestController : BaseController
var bundleRequest = new BundleBacktestRequest
{
User = user,
BacktestRequestsJson = JsonSerializer.Serialize(requests),
TotalBacktests = requests.Count,
BacktestRequestsJson = JsonSerializer.Serialize(request.Requests),
TotalBacktests = request.Requests.Count,
CompletedBacktests = 0,
FailedBacktests = 0,
Status = BundleBacktestRequestStatus.Pending,
Name = name
Name = request.Name
};
_backtester.InsertBundleBacktestRequestForUser(user, bundleRequest);
return Ok(bundleRequest);
}
catch (Exception ex)