commit | author | age
|
9b7a17
|
1 |
package hu.unr.fiber.cardapi; |
FÁ |
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 |
} |