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); }