private async Task Handle(SpecialLiquidationOrderExecutionFailedEvent e, ICommandSender sender) { var executionInfo = await _operationExecutionInfoRepository.GetAsync <SpecialLiquidationOperationData>( operationName : OperationName, id : e.OperationId); if (executionInfo?.Data == null) { return; } if (executionInfo.Data.SwitchState(SpecialLiquidationOperationState.PriceReceived, SpecialLiquidationOperationState.OnTheWayToFail)) { sender.SendCommand(new FailSpecialLiquidationInternalCommand { OperationId = e.OperationId, CreationTime = _dateService.Now(), Reason = e.Reason }, _cqrsContextNamesSettings.TradingEngine); _chaosKitty.Meow(e.OperationId); await _operationExecutionInfoRepository.Save(executionInfo); } }
private async Task Handle(SpecialLiquidationOrderExecutionFailedEvent e, ICommandSender sender) { var executionInfo = await _operationExecutionInfoRepository.GetAsync <SpecialLiquidationOperationData>( operationName : OperationName, id : e.OperationId); if (executionInfo?.Data == null) { return; } if (PriceRequestRetryRequired(executionInfo.Data.RequestedFromCorporateActions)) { var isDiscontinued = await FailIfInstrumentDiscontinued(executionInfo, sender); if (isDiscontinued) { return; } if (executionInfo.Data.SwitchState(SpecialLiquidationOperationState.ExternalOrderExecuted, SpecialLiquidationOperationState.PriceRequested)) { await InternalRetryPriceRequest(e.CreationTime, sender, executionInfo, _marginTradingSettings.SpecialLiquidation.PriceRequestRetryTimeout.Value); return; } } if (executionInfo.Data.SwitchState(SpecialLiquidationOperationState.ExternalOrderExecuted, SpecialLiquidationOperationState.OnTheWayToFail)) { sender.SendCommand(new FailSpecialLiquidationInternalCommand { OperationId = e.OperationId, CreationTime = _dateService.Now(), Reason = e.Reason }, _cqrsContextNamesSettings.TradingEngine); _chaosKitty.Meow(e.OperationId); await _operationExecutionInfoRepository.Save(executionInfo); } }