예제 #1
0
 public UserMessage CreateCardAccount(CreateCardAccountCommand command)
 {
     EnsureIsValid(command);
     try
     {
         var user = _deps.Users.SurelyFind(command.UserId);
         var cardVendor = _deps.CardVendors.SurelyFind(command.CardVendorId);
         var currency = _deps.Currencies.SurelyFind(command.CurrencyISOName);
         var cardAccount = _deps.CardAccountFactory.Create(
             currency,
             user,
             command.AccountExpirationDateUtc);
         _deps.CardAccounts.Create(cardAccount);
         var userCard = _deps.UserCardFactory.Create(
             cardAccount,
             cardVendor,
             user,
             command.CardholderFirstName,
             command.CardholderLastName,
             command.CardExpirationDateUtc);
         _deps.UserCards.Create(userCard);
         var shouldDeposit = command.InitialBalance > 0;
         var events = new List<ApplicationEvent>();
         if (shouldDeposit)
         {
             var name = _deps.TransactionReferenceBook.ForCashDeposit();
             var money = new Money(currency, command.InitialBalance);
             var deposit = cardAccount.Deposit(userCard, name.Code, name.Description, _bankSettings.Location, money, _deps.MoneyConverter);
             _deps.Transactions.Create(deposit);
             events.Add(new TransactionProgressEvent(Operation.Id, deposit.ToModel<TransactionModel>()));
         }
         Commit();
         events.ForEach(Publish);
         return UserMessage.ResourceFormat(() => Messages.AccountOpened, cardAccount.AccountNo);
     }
     catch (ServiceException)
     {
         throw;
     }
     catch (Exception ex)
     {
         throw new ServiceException("Cannot create card account.", ex);
     }
 }
예제 #2
0
 public IHttpActionResult Create(CreateCardAccountCommand command)
 {
     return Ok(_cardAccountService.CreateCardAccount(command));
 }