Пример #1
0
        public async Task <CommandHandlingResult> Handle(EndTransactionHistoryMonitoringCommand command, IEventPublisher publisher)
        {
            var apiClient = _blockchainIntegrationService.TryGetApiClient(command.BlockchainType);

            if (apiClient == null)
            {
                throw new NotSupportedException($"Blockchain type [{command.BlockchainType}] is not supportedю");
            }


            const MonitoringSubscriptionType subscriptionType = MonitoringSubscriptionType.TransactionHistory;

            var address        = command.Address;
            var blockchainType = command.BlockchainType;


            await _monitoringSubscriptionRepository.UnregisterWalletSubscriptionAsync
            (
                blockchainType : blockchainType,
                address : address,
                subscriptionType : subscriptionType
            );

            // TODO: Fix potential issue with subscription/unsubscription race conditions
            // If we have no subscriptions for address-asset pairs for specified address...
            if (await _monitoringSubscriptionRepository.WalletSubscriptionsCount(blockchainType, address, subscriptionType) == 0)
            {
                try
                {
                    // Unsubscribe from address transactions observation (for all assets)
                    await apiClient.StopHistoryObservationOfIncomingTransactionsAsync(address);
                }
                catch (ErrorResponseException e) when(e.StatusCode == HttpStatusCode.NoContent)
                {
                }
            }

            return(CommandHandlingResult.Ok());
        }