Improve Platform stats
This commit is contained in:
@@ -1,8 +1,6 @@
|
||||
using Managing.Application.Abstractions;
|
||||
using Managing.Application.Abstractions.Grains;
|
||||
using Managing.Application.Abstractions.Services;
|
||||
using Managing.Application.Trading.Commands;
|
||||
using Managing.Core;
|
||||
using Managing.Domain.Shared.Helpers;
|
||||
using Managing.Domain.Trades;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
@@ -72,36 +70,6 @@ public class ClosePositionCommandHandler(
|
||||
|
||||
if (!request.IsForBacktest)
|
||||
await tradingService.UpdatePositionAsync(request.Position);
|
||||
|
||||
// Notify platform summary about the closed position
|
||||
try
|
||||
{
|
||||
await ServiceScopeHelpers.WithScopedService<IGrainFactory>(scopeFactory, async grainFactory =>
|
||||
{
|
||||
var platformGrain = grainFactory.GetGrain<IPlatformSummaryGrain>("platform-summary");
|
||||
if (platformGrain != null)
|
||||
{
|
||||
var positionClosedEvent = new PositionClosedEvent
|
||||
{
|
||||
PositionId = request.Position.Identifier,
|
||||
Ticker = request.Position.Ticker,
|
||||
RealizedPnL = request.Position.ProfitAndLoss?.Realized ?? 0,
|
||||
Volume = closedPosition.Quantity * lastPrice * request.Position.Open.Leverage,
|
||||
InitialVolume = request.Position.Open.Quantity * request.Position.Open.Price *
|
||||
request.Position.Open.Leverage
|
||||
};
|
||||
|
||||
await platformGrain.OnPositionClosedAsync(positionClosedEvent);
|
||||
}
|
||||
});
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
logger?.LogError(ex,
|
||||
"Failed to notify platform summary about position closure for position {PositionId}",
|
||||
request.Position.Identifier);
|
||||
}
|
||||
}
|
||||
|
||||
return request.Position;
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
using Managing.Application.Abstractions;
|
||||
using Managing.Application.Abstractions.Grains;
|
||||
using Managing.Application.Abstractions.Services;
|
||||
using Managing.Application.Trading.Commands;
|
||||
using Managing.Common;
|
||||
@@ -13,7 +12,7 @@ namespace Managing.Application.Trading.Handlers
|
||||
IExchangeService exchangeService,
|
||||
IAccountService accountService,
|
||||
ITradingService tradingService,
|
||||
IGrainFactory? grainFactory = null)
|
||||
IGrainFactory grainFactory = null)
|
||||
: ICommandHandler<OpenPositionRequest, Position>
|
||||
{
|
||||
public async Task<Position> Handle(OpenPositionRequest request)
|
||||
@@ -106,29 +105,6 @@ namespace Managing.Application.Trading.Handlers
|
||||
if (!request.IsForPaperTrading)
|
||||
{
|
||||
await tradingService.InsertPositionAsync(position);
|
||||
|
||||
// Notify platform summary about the opened position
|
||||
try
|
||||
{
|
||||
var platformGrain = grainFactory?.GetGrain<IPlatformSummaryGrain>("platform-summary");
|
||||
if (platformGrain != null)
|
||||
{
|
||||
var positionOpenedEvent = new PositionOpenedEvent
|
||||
{
|
||||
PositionId = position.Identifier,
|
||||
Ticker = position.Ticker,
|
||||
Volume = position.Open.Price * position.Open.Quantity * position.Open.Leverage,
|
||||
Direction = position.OriginDirection
|
||||
};
|
||||
|
||||
await platformGrain.OnPositionOpenedAsync(positionOpenedEvent);
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
// Log error but don't fail the position creation
|
||||
// This is a non-critical notification
|
||||
}
|
||||
}
|
||||
|
||||
return position;
|
||||
|
||||
Reference in New Issue
Block a user