Fibinger Ádám
2019-03-03 464000b3acc64e678a57141c2eb806a5b3d2a01c
commit | author | age
9b7a17 1 package hu.unr.fiber.cardapi;
2
ca2732 3 import java.net.URI;
9b7a17 4 import java.util.List;
5 import java.util.Optional;
6
464000 7 import hu.unr.fiber.cardapi.entity.CardEntityInterface;
8 import hu.unr.fiber.cardapi.entity.CardEntityNotFoundException;
9 import hu.unr.fiber.cardapi.entity.CardInteractor;
10 import hu.unr.fiber.cardapi.entity.CardRepository;
11 import hu.unr.fiber.cardapi.rest.CardEntity;
9b7a17 12 import org.slf4j.Logger;
13 import org.slf4j.LoggerFactory;
14 import org.springframework.http.HttpStatus;
15 import org.springframework.http.ResponseEntity;
16 import org.springframework.web.bind.annotation.*;
17 import org.springframework.web.util.UriComponentsBuilder;
18
19 @RestController
20 public class CardController {
21     Logger logger = LoggerFactory.getLogger(CardController.class);
464000 22     private CardInteractor cardService;
9b7a17 23
464000 24     CardController(CardInteractor cS) {
25         this.cardService = cS;
9b7a17 26     }
27
28     @GetMapping("/")
29     public String index() {
ca2732 30         logger.info("GET /index called.");
31         return "Hateoas helyett: (/cards GET /card/{id} POST /card/{id} PUT /card/{id} DELETE /card/{id} )";
9b7a17 32     }
33
34     @GetMapping("/cards")
464000 35     public ResponseEntity<List<CardEntityInterface>> cards() {
37e2b6 36         logger.info("GET /cards called, responded with items.");
464000 37         List<CardEntityInterface> cardList = cardService.getCardList();
38         return ResponseEntity.ok().body(cardList);
9b7a17 39     }
40
41     @GetMapping(value = "/card/{id}")
464000 42     public ResponseEntity<CardEntityInterface> getCard(@PathVariable("id") long id) {
ca2732 43         logger.info("GET /card/" + id + " called.");
37e2b6 44
464000 45         CardEntityInterface card = this.cardService.getCardById(id);
46
47         if (card == null) {
37e2b6 48             return ResponseEntity.notFound().build();
49         }
50
51         return ResponseEntity.ok().body(card);
ca2732 52     }
464000 53 /*
ca2732 54     @DeleteMapping(value = "/card/{id}")
55     public ResponseEntity<String> deleteCard(@PathVariable("id") long id) {
56         logger.info("DELETE /card/" + id + " called");
57
58         return Optional
37e2b6 59                 .ofNullable(this.cardRepository.getOne(id))
ca2732 60                 .map(
61                         card -> {
37e2b6 62                             this.cardRepository.delete(card);
63                             this.cardRepository.flush();
ca2732 64                             return ResponseEntity.ok().body("OK");
65                         }
66                 )
464000 67                 .orElseGet(() -> ResponseEntity.status(HttpStatus.NOT_FOUND).body("No card available with id: " + id));
ca2732 68     }
69
70     @PostMapping(value = "/card/{id}")
464000 71     public ResponseEntity<String> updateCard(@PathVariable("id") long id, @RequestBody CardEntity updatedCardEntity, UriComponentsBuilder ucBuilder) {
ca2732 72
464000 73         logger.info("POST /card/" + id + " called, card update.");
ca2732 74
464000 75         if (updatedCardEntity.validId() && (updatedCardEntity.getId() != id)) {
ca2732 76             return ResponseEntity
77                     .badRequest()
78                     .body("Id field cannot be modified.");
79         }
80
464000 81         CardEntity originalCardEntity = this.cardRepository.getOne(id);
ca2732 82
464000 83         if (originalCardEntity.equals(updatedCardEntity)) {
ca2732 84             return ResponseEntity.accepted().body("Update has no changes.");
85         }
86
87         //card number updated, we have to check if its already exists
464000 88         if (!originalCardEntity.getNumber().equals(updatedCardEntity.getNumber()) && this.getCardByNumber(updatedCardEntity.getNumber()) != null) {
89             logger.error("Unable to update card with id {}. A different CardEntity with number {} already exist", originalCardEntity.getId(), updatedCardEntity.getNumber());
90             return ResponseEntity.status(HttpStatus.CONFLICT).body("CardEntity with number " + updatedCardEntity.getNumber() + " already exists.");
ca2732 91         }
92
464000 93         originalCardEntity.update(updatedCardEntity);
37e2b6 94         this.cardRepository.flush();
ca2732 95
96         return ResponseEntity.accepted().body("OK");
9b7a17 97     }
98
464000 99     private CardEntity getCardByNumber(String number) {
37e2b6 100
101         Long id = cardRepository.findIdByNumber(number);
102
103         if (id == null) {
104             return null;
9b7a17 105         }
106
37e2b6 107         return cardRepository.getOne(id);
9b7a17 108     }
109
110     @PostMapping(value = "/card")
464000 111     public ResponseEntity<String> createCard(@RequestBody CardEntity card, UriComponentsBuilder ucBuilder) {
112         logger.info("Creating CardEntity : {}", card.getNumber());
9b7a17 113
114         if (this.getCardByNumber(card.getNumber()) != null) {
464000 115             logger.error("Unable to create. A CardEntity with number {} already exist", card.getNumber());
116             return ResponseEntity.status(HttpStatus.CONFLICT).body("CardEntity with number " + card.getNumber() + " already exists.");
9b7a17 117         }
118
37e2b6 119         this.cardRepository.saveAndFlush(card);
9b7a17 120
ca2732 121         URI newCardURI = ucBuilder.path("/card/{id}").buildAndExpand(card.getId()).toUri();
122
123         return ResponseEntity
124                 .created(newCardURI)
125                 .body(newCardURI.toString());
9b7a17 126     }
464000 127 */
9b7a17 128 }