Fix fetch userStrategies
This commit is contained in:
@@ -3,6 +3,7 @@ using Managing.Api.Models.Responses;
|
|||||||
using Managing.Application.Abstractions.Grains;
|
using Managing.Application.Abstractions.Grains;
|
||||||
using Managing.Application.Abstractions.Services;
|
using Managing.Application.Abstractions.Services;
|
||||||
using Managing.Application.ManageBot.Commands;
|
using Managing.Application.ManageBot.Commands;
|
||||||
|
using Managing.Core;
|
||||||
using Managing.Domain.Backtests;
|
using Managing.Domain.Backtests;
|
||||||
using Managing.Domain.Bots;
|
using Managing.Domain.Bots;
|
||||||
using Managing.Domain.Candles;
|
using Managing.Domain.Candles;
|
||||||
@@ -35,6 +36,7 @@ public class DataController : ControllerBase
|
|||||||
private readonly IMediator _mediator;
|
private readonly IMediator _mediator;
|
||||||
private readonly ITradingService _tradingService;
|
private readonly ITradingService _tradingService;
|
||||||
private readonly IGrainFactory _grainFactory;
|
private readonly IGrainFactory _grainFactory;
|
||||||
|
private readonly IServiceScopeFactory _serviceScopeFactory;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes a new instance of the <see cref="DataController"/> class.
|
/// Initializes a new instance of the <see cref="DataController"/> class.
|
||||||
@@ -48,6 +50,7 @@ public class DataController : ControllerBase
|
|||||||
/// <param name="mediator">Mediator for handling commands and queries.</param>
|
/// <param name="mediator">Mediator for handling commands and queries.</param>
|
||||||
/// <param name="tradingService">Service for trading operations.</param>
|
/// <param name="tradingService">Service for trading operations.</param>
|
||||||
/// <param name="grainFactory">Orleans grain factory for accessing grains.</param>
|
/// <param name="grainFactory">Orleans grain factory for accessing grains.</param>
|
||||||
|
/// <param name="serviceScopeFactory">Service scope factory for creating scoped services.</param>
|
||||||
public DataController(
|
public DataController(
|
||||||
IExchangeService exchangeService,
|
IExchangeService exchangeService,
|
||||||
IAccountService accountService,
|
IAccountService accountService,
|
||||||
@@ -56,7 +59,8 @@ public class DataController : ControllerBase
|
|||||||
IAgentService agentService,
|
IAgentService agentService,
|
||||||
IMediator mediator,
|
IMediator mediator,
|
||||||
ITradingService tradingService,
|
ITradingService tradingService,
|
||||||
IGrainFactory grainFactory)
|
IGrainFactory grainFactory,
|
||||||
|
IServiceScopeFactory serviceScopeFactory)
|
||||||
{
|
{
|
||||||
_exchangeService = exchangeService;
|
_exchangeService = exchangeService;
|
||||||
_accountService = accountService;
|
_accountService = accountService;
|
||||||
@@ -66,6 +70,7 @@ public class DataController : ControllerBase
|
|||||||
_mediator = mediator;
|
_mediator = mediator;
|
||||||
_tradingService = tradingService;
|
_tradingService = tradingService;
|
||||||
_grainFactory = grainFactory;
|
_grainFactory = grainFactory;
|
||||||
|
_serviceScopeFactory = serviceScopeFactory;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -405,9 +410,12 @@ public class DataController : ControllerBase
|
|||||||
var endDate = DateTime.UtcNow;
|
var endDate = DateTime.UtcNow;
|
||||||
var agentBalanceHistory = await _agentService.GetAgentBalances(agentName, startDate, endDate);
|
var agentBalanceHistory = await _agentService.GetAgentBalances(agentName, startDate, endDate);
|
||||||
|
|
||||||
// Convert to detailed view model with additional information
|
// Convert to detailed view model with additional information using separate scopes to avoid DbContext concurrency
|
||||||
var result = await Task.WhenAll(
|
var result = await Task.WhenAll(
|
||||||
userStrategies.Select(strategy => MapStrategyToViewModelAsync(strategy, agentBalanceHistory))
|
userStrategies.Select(strategy =>
|
||||||
|
ServiceScopeHelpers.WithScopedService<ITradingService, UserStrategyDetailsViewModel>(
|
||||||
|
_serviceScopeFactory,
|
||||||
|
async tradingService => await MapStrategyToViewModelAsync(strategy, agentBalanceHistory, tradingService)))
|
||||||
);
|
);
|
||||||
|
|
||||||
return Ok(result);
|
return Ok(result);
|
||||||
@@ -446,7 +454,7 @@ public class DataController : ControllerBase
|
|||||||
var agentBalanceHistory = await _agentService.GetAgentBalances(agentName, startDate, endDate);
|
var agentBalanceHistory = await _agentService.GetAgentBalances(agentName, startDate, endDate);
|
||||||
|
|
||||||
// Map the strategy to a view model using the shared method
|
// Map the strategy to a view model using the shared method
|
||||||
var result = await MapStrategyToViewModelAsync(strategy, agentBalanceHistory);
|
var result = await MapStrategyToViewModelAsync(strategy, agentBalanceHistory, _tradingService);
|
||||||
|
|
||||||
return Ok(result);
|
return Ok(result);
|
||||||
}
|
}
|
||||||
@@ -456,9 +464,10 @@ public class DataController : ControllerBase
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="strategy">The trading bot to map</param>
|
/// <param name="strategy">The trading bot to map</param>
|
||||||
/// <param name="agentBalanceHistory">Agent balance history data</param>
|
/// <param name="agentBalanceHistory">Agent balance history data</param>
|
||||||
|
/// <param name="tradingService">Trading service for fetching positions</param>
|
||||||
/// <returns>A view model with detailed strategy information</returns>
|
/// <returns>A view model with detailed strategy information</returns>
|
||||||
private async Task<UserStrategyDetailsViewModel> MapStrategyToViewModelAsync(Bot strategy,
|
private async Task<UserStrategyDetailsViewModel> MapStrategyToViewModelAsync(Bot strategy,
|
||||||
AgentBalanceHistory agentBalanceHistory)
|
AgentBalanceHistory agentBalanceHistory, ITradingService tradingService)
|
||||||
{
|
{
|
||||||
// Calculate volume statistics
|
// Calculate volume statistics
|
||||||
decimal totalVolume = strategy.Volume;
|
decimal totalVolume = strategy.Volume;
|
||||||
@@ -469,8 +478,8 @@ public class DataController : ControllerBase
|
|||||||
|
|
||||||
int winRate = wins + losses > 0 ? (wins * 100) / (wins + losses) : 0;
|
int winRate = wins + losses > 0 ? (wins * 100) / (wins + losses) : 0;
|
||||||
|
|
||||||
// Fetch positions associated with this bot
|
// Fetch positions associated with this bot using the provided trading service
|
||||||
var positions = await _tradingService.GetPositionsByInitiatorIdentifierAsync(strategy.Identifier);
|
var positions = await tradingService.GetPositionsByInitiatorIdentifierAsync(strategy.Identifier);
|
||||||
|
|
||||||
// Convert agent balance history to wallet balances dictionary
|
// Convert agent balance history to wallet balances dictionary
|
||||||
var walletBalances = agentBalanceHistory?.AgentBalances?
|
var walletBalances = agentBalanceHistory?.AgentBalances?
|
||||||
|
|||||||
Reference in New Issue
Block a user