@Transactional @Override public Payment makePayment(String username, Payment payment) { User user = userDao.getByUsername(username); payment.setUser(user); if (!(checkCreditCard(payment))) // credit card invalid throw new AccessDeniedException("Credit card invalid"); AccountType accountType; try { accountType = accountTypeDao.getAccountTypeByPrice(payment.getAmount()); } catch (NoResultException nre) { throw new AccessDeniedException("No such type of account."); } paymentDao.makePayment(payment); UserAccountType userAccountType; try { userAccountType = userAccountTypeDao.getUserAccountType(user.getId()); userAccountType.setAccountType(accountType); userAccountType.setPayment(payment); userAccountTypeDao.updateUserAccountType(userAccountType); } catch (NoResultException nre) { userAccountType = new UserAccountType(); userAccountType.setUser(user); userAccountType.setAccountType(accountType); userAccountType.setPayment(payment); userAccountTypeDao.addUserAccountType(userAccountType); } return payment; }
private boolean checkCreditCard(Payment payment) { return checkCreditCardNumberValidity(payment.getCreditCardNumber()) && checkCreditCardExpirationDate(payment.getValidUntil()) && payment.getAmount() > 0; }