private async Task Handle(OrderHistoryEvent e) { var order = e.OrderSnapshot; var isBasicOrder = new[] { OrderTypeContract.Market, OrderTypeContract.Limit, OrderTypeContract.Stop } .Contains(order.Type); if (!isBasicOrder || !order.ProductComplexityConfirmationReceived()) { return; } _log.LogInformation($"Product complexity confirmation received for account {order.AccountId} and orderId {order.Id}"); var entity = await _complexityWarningRepository.GetOrCreate(order.AccountId, () => ComplexityWarningState.Start(order.AccountId)); entity.OnConfirmedOrderReceived(order.Id, order.CreatedTimestamp, _settings.ComplexityWarningsCount, out var confirmationFlagShouldBeSwitched); if (confirmationFlagShouldBeSwitched) { await _accountManagementService.UpdateComplexityWarningFlag(order.AccountId, shouldShowProductComplexityWarning : false, order.Id); _log.LogInformation($"Flag {BrokerFeature.ProductComplexityWarning} for account {entity.AccountId} is switched to off"); } await _complexityWarningRepository.Save(entity); }
private async Task Run(CancellationToken stoppingToken) { var expirationTimestamp = DateTime.UtcNow.Subtract(_settings.ComplexityWarningExpiration); var expiredAccounts = await _complexityWarningRepository.GetExpired(expirationTimestamp); foreach (var acc in expiredAccounts) { stoppingToken.ThrowIfCancellationRequested(); await _log.WriteInfoAsync(nameof(CleanupExpiredComplexityService), nameof(Run), $"Product complexity confirmation expired for account {acc.AccountId}. " + $"{nameof(_settings.ComplexityWarningExpiration)} : {_settings.ComplexityWarningExpiration}." + $"{nameof(expirationTimestamp)} : {expirationTimestamp}." + $"{nameof(acc.SwitchedToFalseAt)} : {acc.SwitchedToFalseAt}." + $"Resetting {nameof(IAccount.AdditionalInfo.ShouldShowProductComplexityWarning)} flag to true"); acc.ResetConfirmation(); await _accountManagementService.UpdateComplexityWarningFlag(acc.AccountId, shouldShowProductComplexityWarning : true); await _complexityWarningRepository.Save(acc); } }