public BankOperationModel Transfer(InterbankCardTransferCommand command)
 {
     EnsureIsValid(command);
     EnsureIsSecure <InterbankCardTransferCommand, CardSecurityValidator>(command);
     try
     {
         var fromCard = _deps.UserCards.SurelyFind(command.FromCardId);
         var toCard   = _deps.UserCards.QueryOne(DbQuery.For <UserCard>().FilterBy(x => x.CardNo == command.ToCardNo));
         if (toCard == null)
         {
             throw NotFound.ExceptionFor <UserCard>(command.ToCardNo);
         }
         var transfer = _deps.CardTransferFactory.Create(fromCard, toCard, command.Amount);
         _deps.CardTransfers.Create(transfer);
         var userOperation = new UserBankOperation(transfer, Identity.User);
         _deps.UserBankOperations.Create(userOperation);
         Commit();
         var model = transfer.ToModel <BankOperation, BankOperationModel>();
         Publish(new OperationProgressEvent(Operation.Id, model));
         return(model);
     }
     catch (DomainException ex)
     {
         throw new UserMessageException(new UserMessage(ex.Message, ex.GetType().Name));
     }
     catch (Exception ex)
     {
         throw new ServiceException("Can't create transfer.", ex);
     }
 }
Exemplo n.º 2
0
        public void Can_Submit_And_Process_Card_Transfer()
        {
            var user = AuthenticateTerminator();

            user.Profile.SmsConfirmationEnabled = false;
            var transferService    = Scope.Resolve <ICardTransferClientService>();
            var cardAccountService = Scope.Resolve <ICardAccountService>();
            var transferRepository = Scope.Resolve <IRepository <Transfer> >();
            var processingService  = Scope.Resolve <IProcessingService>();

            var cards = cardAccountService.GetUserCards(new CardQuery())
                        .Where(x => x.AccountNo != null)
                        .ToList();
            var command = new InterbankCardTransferCommand
            {
                FromCardId = cards.First(x => x.Owner.UserId == user.Id).CardId,
                ToCardNo   = cards.First(x => x.Owner.UserId != user.Id).CardNo,
                ToCardExpirationDateUtc = cards[1].ExpirationDateUtc,
                Amount = 10
            };

            var operation = transferService.Transfer(command);
            var command2  = new ProcessBankOperationCommand
            {
                BankOperationId = operation.Id
            };
            var nextState = processingService.ProcessBankOperation(command2);
            var transfer  = transferRepository.Find(command2.BankOperationId);

            processingService.ProcessTransaction(new ProcessTransactionCommand
            {
                OperationId   = command2.BankOperationId,
                TransactionId = transfer.Withdrawal.Id
            });
            nextState = processingService.ProcessBankOperation(command2);
            processingService.ProcessTransaction(new ProcessTransactionCommand
            {
                OperationId   = command2.BankOperationId,
                TransactionId = transfer.Deposit.Id
            });
            nextState = processingService.ProcessBankOperation(command2);
            transfer  = transferRepository.Find(command2.BankOperationId);
            Assert.AreEqual(ProcessStatus.Completed, transfer.Status);
        }
Exemplo n.º 3
0
        public void Can_Submit_Card_Transfer()
        {
            var user = AuthenticateTerminator();

            user.Profile.SmsConfirmationEnabled = false;
            var transferService    = Scope.Resolve <ICardTransferClientService>();
            var cardAccountService = Scope.Resolve <ICardAccountService>();

            var cards = cardAccountService.GetUserCards(new CardQuery())
                        .Where(x => x.AccountNo != null)
                        .ToList();
            var command = new InterbankCardTransferCommand
            {
                FromCardId = cards.First(x => x.Owner.UserId == user.Id).CardId,
                ToCardNo   = cards.First(x => x.Owner.UserId != user.Id).CardNo,
                ToCardExpirationDateUtc = cards[1].ExpirationDateUtc,
                Amount = 10
            };

            transferService.Transfer(command);
        }
Exemplo n.º 4
0
 public IHttpActionResult Interbank(InterbankCardTransferCommand command)
 {
     _transferService.Transfer(command);
     return(StatusCode(HttpStatusCode.Accepted));
 }