Example #1
0
        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);
        }
Example #2
0
        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);
            }
        }