コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }