Fibinger Ádám
2019-02-19 9b7a175df8a8f9486d58c3d71e92d7556c06d840
commit | author | age
9b7a17 1 package hu.unr.fiber.cardapi;
2
3 import java.util.ArrayList;
4 import java.util.List;
5 import java.util.Optional;
6 import java.util.Random;
7
8 import org.slf4j.Logger;
9 import org.slf4j.LoggerFactory;
10 import org.springframework.http.HttpHeaders;
11 import org.springframework.http.HttpStatus;
12 import org.springframework.http.ResponseEntity;
13 import org.springframework.web.bind.annotation.*;
14 import org.springframework.web.util.UriComponentsBuilder;
15
16 @RestController
17 public class CardController {
18     Logger logger = LoggerFactory.getLogger(CardController.class);
19
20     protected List<Card> cardList = new ArrayList<>();
21
22     public CardController() {
23         cardList.add(new Card(1, "Első kártya", "1"));
24         cardList.add(new Card(2, "Második kártya", "2"));
25         cardList.add(new Card(5, "Harmadik kártya", "4"));
26         cardList.add(new Card(8, "Tízezer egyszázadik kártya", "10100"));
27     }
28
29     @GetMapping("/")
30     public String index() {
31         logger.info("/index called.");
32         return "Hello world! Hateoas helyett: (/cards GET /card/{id} POST /card/{id} PUT /card/{id} DELETE /card/{id} )";
33     }
34
35     @GetMapping("/cards")
36     public List<Card> cards() {
37         logger.info("/cards called, responded with " + cardList.size() + " items.");
38         return cardList;
39     }
40
41     @GetMapping(value = "/card/{id}")
42     public ResponseEntity<Card> getUser(@PathVariable("id") long id) {
43         logger.info("/card/" + id + " called");
44         return Optional
45                 .ofNullable(this.getCardByID(id))
46                 .map(card -> ResponseEntity.ok().body(card))          //200 OK
47                 .orElseGet(() -> ResponseEntity.notFound().build());  //404 Not found
48     }
49
50     private Card getCardByID(long id) {
51         for (Card card : cardList) {
52             if (card.getId() == id) {
53                 return card;
54             }
55         }
56
57         return null;
58     }
59
60     private Card getCardByNumber(String number) {
61         for (Card card : cardList) {
62             if (card.getNumber().equals(number)) {
63                 return card;
64             }
65         }
66
67         return null;
68     }
69
70
71     @PostMapping(value = "/card")
72     public ResponseEntity<String> createCard(@RequestBody Card card, UriComponentsBuilder ucBuilder) {
73         logger.info("Creating Card : {}", card);
74
75         if (this.getCardByNumber(card.getNumber()) != null) {
76             logger.error("Unable to create. A Card with number {} already exist", card.getNumber());
77             return ResponseEntity.status(HttpStatus.CONFLICT).build();
78         }
79
80         long nextId = new Random().nextLong();
81
82         while (this.getCardByID(nextId) != null) {
83             nextId = new Random().nextLong();
84         }
85
86         card.setId(nextId);
87
88         cardList.add(card);
89
90         HttpHeaders headers = new HttpHeaders();
91         headers.setLocation(ucBuilder.path("/card/{id}").buildAndExpand(card.getId()).toUri());
92         return new ResponseEntity<String>(headers, HttpStatus.CREATED);
93     }
94
95 }