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