From 37e2b6c7cb1fde8b9e7bf8cb38f01eee8157324f Mon Sep 17 00:00:00 2001 From: Fibinger Ádám <adam.fibinger@wup.hu> Date: Wed, 27 Feb 2019 14:47:00 +0100 Subject: [PATCH] JPA + Hibernate working version (H2 console enabled) --- src/main/java/hu/unr/fiber/cardapi/CardController.java | 70 +++++++++++++--------------------- src/main/java/hu/unr/fiber/cardapi/CardRepository.java | 4 ++ pom.xml | 6 ++ src/main/java/hu/unr/fiber/cardapi/Card.java | 17 ++++++-- 4 files changed, 49 insertions(+), 48 deletions(-) diff --git a/pom.xml b/pom.xml index 188990e..5252096 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ <groupId>hu.unr.fiber</groupId> <artifactId>cardapi</artifactId> - <version>0.1.1</version> + <version>0.1.2</version> <parent> <groupId>org.springframework.boot</groupId> @@ -38,6 +38,10 @@ <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> + <dependency> + <groupId>com.jayway.jsonpath</groupId> + <artifactId>json-path</artifactId> + </dependency> </dependencies> <properties> diff --git a/src/main/java/hu/unr/fiber/cardapi/Card.java b/src/main/java/hu/unr/fiber/cardapi/Card.java index 8440e38..b5959be 100644 --- a/src/main/java/hu/unr/fiber/cardapi/Card.java +++ b/src/main/java/hu/unr/fiber/cardapi/Card.java @@ -1,19 +1,23 @@ package hu.unr.fiber.cardapi; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +import javax.persistence.*; import java.util.Objects; @Entity +@Table(name = "Card") +@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"}) public class Card { public static final long INVALID_ID = 0; @Id - @GeneratedValue + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id", updatable = false, nullable = false) private long id = INVALID_ID; private String name; //FIXME: @Pattern([0-9]+) + @Column(unique=true) private String number; private String cardHolder; @@ -83,4 +87,9 @@ this.setNumber(otherCard.getNumber()); this.setCardHolder(otherCard.getCardHolder()); } + + @Override + public String toString() { + return "#" + this.number + " - " + this.name + " @ " + this.cardHolder; + } } diff --git a/src/main/java/hu/unr/fiber/cardapi/CardController.java b/src/main/java/hu/unr/fiber/cardapi/CardController.java index d3eb21f..76aff0f 100644 --- a/src/main/java/hu/unr/fiber/cardapi/CardController.java +++ b/src/main/java/hu/unr/fiber/cardapi/CardController.java @@ -1,10 +1,8 @@ package hu.unr.fiber.cardapi; import java.net.URI; -import java.util.ArrayList; import java.util.List; import java.util.Optional; -import java.util.Random; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -17,14 +15,12 @@ public class CardController { Logger logger = LoggerFactory.getLogger(CardController.class); - protected List<Card> cardList = new ArrayList<>(); - - public CardController() { - cardList.add(new Card(1, "Első kártya", "1")); - cardList.add(new Card(2, "Második kártya", "2")); - cardList.add(new Card(5, "Harmadik kártya", "4")); - cardList.add(new Card(8, "Tízezer egyszázadik kártya", "10100")); + CardController(CardRepository cR) + { + this.cardRepository = cR; } + + CardRepository cardRepository; @GetMapping("/") public String index() { @@ -34,17 +30,21 @@ @GetMapping("/cards") public List<Card> cards() { - logger.info("GET /cards called, responded with " + cardList.size() + " items."); - return cardList; + logger.info("GET /cards called, responded with items."); + return cardRepository.findAll(); } @GetMapping(value = "/card/{id}") public ResponseEntity<Card> getCard(@PathVariable("id") long id) { logger.info("GET /card/" + id + " called."); - return Optional - .ofNullable(this.getCardByID(id)) - .map(card -> ResponseEntity.ok().body(card)) //200 OK - .orElseGet(() -> ResponseEntity.notFound().build()); //404 Not found + + if (!this.cardRepository.existsById(id)) { + return ResponseEntity.notFound().build(); + } + + Card card = this.cardRepository.getOne(id); + + return ResponseEntity.ok().body(card); } @DeleteMapping(value = "/card/{id}") @@ -52,10 +52,11 @@ logger.info("DELETE /card/" + id + " called"); return Optional - .ofNullable(this.getCardByID(id)) + .ofNullable(this.cardRepository.getOne(id)) .map( card -> { - this.cardList.remove(card); + this.cardRepository.delete(card); + this.cardRepository.flush(); return ResponseEntity.ok().body("OK"); } ) @@ -74,7 +75,7 @@ .body("Id field cannot be modified."); } - Card originalCard = this.getCardByID(id); + Card originalCard = this.cardRepository.getOne(id); if (originalCard.equals(updatedCard)) { return ResponseEntity.accepted().body("Update has no changes."); @@ -87,30 +88,21 @@ } originalCard.update(updatedCard); + this.cardRepository.flush(); return ResponseEntity.accepted().body("OK"); } - private Card getCardByID(long id) { - for (Card card : cardList) { - if (card.getId() == id) { - return card; - } - } - - return null; - } - private Card getCardByNumber(String number) { - for (Card card : cardList) { - if (card.getNumber().equals(number)) { - return card; - } + + Long id = cardRepository.findIdByNumber(number); + + if (id == null) { + return null; } - return null; + return cardRepository.getOne(id); } - @PostMapping(value = "/card") public ResponseEntity<String> createCard(@RequestBody Card card, UriComponentsBuilder ucBuilder) { @@ -121,15 +113,7 @@ return ResponseEntity.status(HttpStatus.CONFLICT).body("Card with number "+ card.getNumber() + " already exists."); } - long nextId = 1; - - while (this.getCardByID(nextId) != null) { - nextId++; - } - - card.setId(nextId); - - cardList.add(card); + this.cardRepository.saveAndFlush(card); URI newCardURI = ucBuilder.path("/card/{id}").buildAndExpand(card.getId()).toUri(); diff --git a/src/main/java/hu/unr/fiber/cardapi/CardRepository.java b/src/main/java/hu/unr/fiber/cardapi/CardRepository.java index a5404d5..28c4fbe 100644 --- a/src/main/java/hu/unr/fiber/cardapi/CardRepository.java +++ b/src/main/java/hu/unr/fiber/cardapi/CardRepository.java @@ -1,6 +1,10 @@ package hu.unr.fiber.cardapi; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; public interface CardRepository extends JpaRepository<Card, Long> { + @Query("SELECT c.id FROM Card c where c.number = :number") + Long findIdByNumber(@Param("number") String number); } -- Gitblit v1.8.0