-
Notifications
You must be signed in to change notification settings - Fork 0
/
RequestsController.java
114 lines (103 loc) · 5.53 KB
/
RequestsController.java
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
package innotutor.innotutor_backend.controller.card;
import innotutor.innotutor_backend.dto.card.CardDTO;
import innotutor.innotutor_backend.dto.card.SubjectDTO;
import innotutor.innotutor_backend.security.CustomPrincipal;
import innotutor.innotutor_backend.service.CardService;
import innotutor.innotutor_backend.service.CardsListService;
import innotutor.innotutor_backend.service.SessionService;
import innotutor.innotutor_backend.service.UserService;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping(value = "/requests", produces = MediaType.APPLICATION_JSON_VALUE)
@CrossOrigin(origins = "*", allowedHeaders = "*", methods = {
RequestMethod.GET, RequestMethod.POST, RequestMethod.PUT, RequestMethod.DELETE})
public class RequestsController {
private final transient CardController cardController;
private final transient CardService cardService;
private final transient CardsListService cardsListService;
private final transient UserService userService;
private final transient SessionService sessionService;
public RequestsController(final CardController cardController, final CardService cardService,
final CardsListService cardsListService, final UserService userService,
final SessionService sessionService) {
this.cardController = cardController;
this.cardService = cardService;
this.cardsListService = cardsListService;
this.userService = userService;
this.sessionService = sessionService;
}
@GetMapping(produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<List<CardDTO>> getRequests(@AuthenticationPrincipal final CustomPrincipal user) {
final List<CardDTO> requests = cardsListService.getRequests(userService.getUserId(user));
return requests == null
? new ResponseEntity<>(HttpStatus.NOT_FOUND)
: new ResponseEntity<>(requests, HttpStatus.OK);
}
@GetMapping(value = "/subjects", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<List<SubjectDTO>> getAvailableRequestSubjects(@AuthenticationPrincipal final CustomPrincipal user) {
final List<SubjectDTO> result = sessionService.getAvailableRequestSubjects(userService.getUserId(user));
return result == null
? new ResponseEntity<>(HttpStatus.BAD_REQUEST)
: new ResponseEntity<>(result, HttpStatus.OK);
}
@GetMapping(value = "/user/{userId}", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<List<CardDTO>> getUserRequestsById(@PathVariable final Long userId,
@AuthenticationPrincipal final CustomPrincipal user) {
ResponseEntity<List<CardDTO>> response;
if (userService.isUserEqualsId(user, userId)) {
response = this.getRequests(user);
} else {
final List<CardDTO> result = cardsListService.getUserRequests(userId);
response = result == null
? new ResponseEntity<>(HttpStatus.NOT_FOUND)
: new ResponseEntity<>(result, HttpStatus.OK);
}
return response;
}
@PostMapping(produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<CardDTO> postRequestCard(@RequestBody final CardDTO cardDTO,
@AuthenticationPrincipal final CustomPrincipal user) {
ResponseEntity<CardDTO> response;
if (cardDTO == null) {
response = new ResponseEntity<>(HttpStatus.BAD_REQUEST);
} else {
final CardDTO result = cardService.postRequestCard(cardDTO, userService.getUserId(user));
response = result == null
? new ResponseEntity<>(HttpStatus.BAD_REQUEST)
: new ResponseEntity<>(result, HttpStatus.CREATED);
}
return response;
}
@PutMapping(value = "/{cardId}", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<CardDTO> putRequestCard(@PathVariable final Long cardId,
@RequestBody final CardDTO cardDTO,
@AuthenticationPrincipal final CustomPrincipal user) {
ResponseEntity<CardDTO> response;
if (cardDTO == null || cardId == null) {
response = new ResponseEntity<>(HttpStatus.BAD_REQUEST);
} else {
final CardDTO result = cardService.putRequestCard(cardId, cardDTO, userService.getUserId(user));
if (result == null) {
response = new ResponseEntity<>(HttpStatus.BAD_REQUEST);
} else {
response = new ResponseEntity<>(
result,
result.getCardId().equals(cardDTO.getCardId())
? HttpStatus.OK
: HttpStatus.CREATED
);
}
}
return response;
}
@DeleteMapping(value = "/{cardId}", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> deleteRequestCardById(@PathVariable final Long cardId,
@AuthenticationPrincipal final CustomPrincipal user) {
return cardController.deleteCardById(cardId, user);
}
}