private async Task HandleTransferAccepted(string[] topics, string data)
        {
            var acceptedTransferModel = _eventDecoder.DecodeTransferAcceptedEvent(topics, data);
            var resultError           = await _paymentsService.AcceptPaymentTransferAsync(acceptedTransferModel.TransferId);

            if (resultError != PaymentTransfersErrorCodes.None)
            {
                _log.Error(message: "Unable accept a payment transfer because of error",
                           context: new { Error = resultError, acceptedTransferModel.TransferId });
                return;
            }

            _log.Info("Payment transfer was successfully marked as accepted", context: acceptedTransferModel.TransferId);

            var paymentTransfer = await _paymentTransfersRepository.GetByTransferIdAsync(acceptedTransferModel.TransferId);

            if (paymentTransfer == null)
            {
                throw new InvalidOperationException(
                          $"Payment transfer with id: {acceptedTransferModel.TransferId} which was just accepted was not found in DB");
            }

            await _transferProcessedPublisher.PublishAsync(new PaymentTransferProcessedEvent
            {
                TransferId     = paymentTransfer.TransferId,
                Status         = ProcessedPaymentTransferStatus.Accepted,
                InvoiceId      = paymentTransfer.InvoiceId,
                CampaignId     = paymentTransfer.SpendRuleId,
                CustomerId     = paymentTransfer.CustomerId,
                Timestamp      = DateTime.UtcNow,
                Amount         = paymentTransfer.AmountInTokens,
                InstalmentName = paymentTransfer.InstalmentName,
                LocationCode   = paymentTransfer.LocationCode,
            });

            _log.Info("Payment transfer processed event published", context: acceptedTransferModel.TransferId);
        }