| | |
| | | |
| | | import hu.unr.fiber.cardapi.interfaces.CardInteractorInterface; |
| | | import hu.unr.fiber.cardapi.interfaces.CardInterface; |
| | | import hu.unr.fiber.cardapi.interfaces.CardInvalidUpdateException; |
| | | import hu.unr.fiber.cardapi.interfaces.CardNotFoundException; |
| | | import hu.unr.fiber.cardapi.rest.RestCard; |
| | | import org.springframework.orm.jpa.JpaObjectRetrievalFailureException; |
| | | import org.springframework.stereotype.Component; |
| | |
| | | @Override |
| | | public CardInterface getCardById(long id) throws CardNotFoundException { |
| | | if (!this.cardRepository.existsById(id)) { |
| | | throw new CardNotFoundException("No such card with id: #"+ id); |
| | | throw new CardNotFoundException("No such card with id: #" + id); |
| | | } |
| | | |
| | | Card c = this.cardRepository.getOne(id); |
| | |
| | | |
| | | @Override |
| | | public CardInterface update(long id, CardInterface updatedCard) throws CardInvalidUpdateException, CardNotFoundException { |
| | | |
| | | if (updatedCard.validId() && (updatedCard.getId() != id)) { |
| | | throw new CardInvalidUpdateException("Card ID cannot be changed! ", updatedCard); |
| | | throw new CardInvalidUpdateException("Card ID cannot be changed! ", |
| | | CardInvalidUpdateException.CARD_ID_CHANGE); |
| | | } |
| | | |
| | | if (this.getCardByNumber(updatedCard.getNumber()) != null) { |
| | | throw new CardInvalidUpdateException("Given card number already exists", updatedCard); |
| | | Card oldCard = this.getCardByNumber(updatedCard.getNumber()); |
| | | |
| | | if (oldCard == null) { |
| | | oldCard = this.cardRepository.getOne(id); |
| | | } else { |
| | | if (oldCard.getId() != id) { |
| | | //The given card Number is already assigned to an another card with different ID |
| | | String message = "Cannot update card number, given card number already assigned to card with ID #" + oldCard.getId(); |
| | | throw new CardInvalidUpdateException(message, CardInvalidUpdateException.CARD_NUMBER_ALREADY_ASSIGNED); |
| | | } |
| | | } |
| | | |
| | | this.cardRepository.saveAndFlush((Card) updatedCard); |
| | | oldCard.update(updatedCard); |
| | | |
| | | this.cardRepository.saveAndFlush(oldCard); |
| | | |
| | | return this.getCardById(updatedCard.getId()); |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public CardInterface create(CardInterface card) throws CardInvalidUpdateException { |
| | | Card duplicateNumberedCard = this.getCardByNumber(card.getNumber()); |
| | | if (duplicateNumberedCard != null) { |
| | | throw new CardInvalidUpdateException("Card with the same number already exists!", |
| | | CardInvalidUpdateException.CARD_NUMBER_ALREADY_ASSIGNED); |
| | | } |
| | | |
| | | Card c = new Card(); |
| | | c.update(card); |
| | | |
| | | this.cardRepository.saveAndFlush(c); |
| | | |
| | | return c; |
| | | } |
| | | |
| | | private Card getCardByNumber(String number) { |
| | | |
| | | Long id = cardRepository.findIdByNumber(number); |