public Task Process(BatchProcess data) { var flowId = HttpContext.Items["flowId"].ToString(); var messages = data.Messages.Select(m => mapper.Map <UserMessage>(m)).ToArray(); if (messages.Length > 0) { var messagesEvent = new BatchAddMessagesEvent { Messages = messages }; publishingRouter.Publish(Queues.Users, messagesEvent, flowId); } if (data.Transfers.Length > 0) { var transfersEvent = new BatchTransferEvent { Transfers = data.Transfers }; publishingRouter.Publish(Queues.Accounts, transfersEvent, flowId); } if (data.ProcessedPaymentsIds.Length > 0) { var processingTimestampEvent = new UpdateLatestProcessingTimestampEvent { Ids = data.ProcessedPaymentsIds, Timestamp = data.ProcessingTimestamp }; publishingRouter.Publish(Queues.Payments, processingTimestampEvent, flowId); } var instalments = data.RepaidInstalmentsIds; if (instalments.Length > 0) { var transfersEvent = new BatchRepayInstalmentsEvent { Ids = instalments }; publishingRouter.Publish(Queues.Loans, transfersEvent, flowId); } return(Task.CompletedTask); }
public Task BatchTransfer(MessageContext context, BatchTransferEvent inputEvent) { if (inputEvent.Transfers.Any(r => !accountsRepository.CanTransfer(r.AccountId, r.Recipient, r.Amount))) { throw new ArgumentException("Cannot transfer founds."); } var transfers = inputEvent.Transfers.Select(r => TransferToCreateTransactionEvent(r)).ToArray(); var batchAddTransactionsEvent = new BatchCreateTransactionEvent { Requests = transfers }; foreach (var t in inputEvent.Transfers) { accountsRepository.Transfer(t.AccountId, t.Recipient, t.Amount); } //info do kogo ma wrocic publishingRouter.Publish(Queues.Transactions, batchAddTransactionsEvent, context.FlowId, context.ReplyTo); return(Task.CompletedTask); }