From 12abae6da924cb33858fbc9948fdf7a181e2038c Mon Sep 17 00:00:00 2001 From: Fibinger Ádám <adam.fibinger@wup.hu> Date: Tue, 12 Mar 2019 19:31:27 +0100 Subject: [PATCH] Decoupling final version --- src/main/java/hu/unr/fiber/cardapi/hibernate/CardInteractor.java | 114 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 114 insertions(+), 0 deletions(-) diff --git a/src/main/java/hu/unr/fiber/cardapi/hibernate/CardInteractor.java b/src/main/java/hu/unr/fiber/cardapi/hibernate/CardInteractor.java new file mode 100644 index 0000000..b8e72bc --- /dev/null +++ b/src/main/java/hu/unr/fiber/cardapi/hibernate/CardInteractor.java @@ -0,0 +1,114 @@ +package hu.unr.fiber.cardapi.hibernate; + +import java.util.ArrayList; +import java.util.List; + +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; + +@Component +public class CardInteractor implements CardInteractorInterface { + + private CardRepository cardRepository; + + CardInteractor(CardRepository cardRepository) { + this.cardRepository = cardRepository; + } + + @Override + public List<CardInterface> getCardList() { + + List<Card> cardList = this.cardRepository.findAll(); + List<CardInterface> restCardList = new ArrayList<>(); + + for (Card card : cardList) { + RestCard ce = new RestCard(card.getId()); + restCardList.add(ce.update(card)); + } + + return restCardList; + } + + @Override + public CardInterface getCardById(long id) throws CardNotFoundException { + if (!this.cardRepository.existsById(id)) { + throw new CardNotFoundException("No such card with id: #" + id); + } + + Card c = this.cardRepository.getOne(id); + RestCard ce = new RestCard(c.getId()); + + return ce.update(c); + } + + @Override + public void delete(long id) throws CardNotFoundException { + try { + Card c = this.cardRepository.getOne(id); + this.cardRepository.delete(c); + this.cardRepository.flush(); + } catch (JpaObjectRetrievalFailureException e) { + throw new CardNotFoundException(e.getMessage()); + } + } + + @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! ", + CardInvalidUpdateException.CARD_ID_CHANGE); + } + + 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); + } + } + + 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); + + if (id == null) { + return null; + } + + return this.cardRepository.getOne(id); + } +} -- Gitblit v1.8.0