1
1
package com .omatheusmesmo .shoppmate .list .controller ;
2
2
3
+ import com .omatheusmesmo .shoppmate .list .dtos .ListItemRequestDTO ;
4
+ import com .omatheusmesmo .shoppmate .list .dtos .ListItemResponseDTO ;
3
5
import com .omatheusmesmo .shoppmate .list .entity .ListItem ;
6
+ import com .omatheusmesmo .shoppmate .list .mapper .ListItemMapper ;
4
7
import com .omatheusmesmo .shoppmate .list .service .ListItemService ;
5
8
import com .omatheusmesmo .shoppmate .utils .HttpResponseUtil ;
6
9
import io .swagger .v3 .oas .annotations .Operation ;
10
+ import jakarta .validation .Valid ;
7
11
import org .springframework .beans .factory .annotation .Autowired ;
8
12
import org .springframework .http .ResponseEntity ;
9
13
import org .springframework .web .bind .annotation .*;
14
+ import org .springframework .web .servlet .support .ServletUriComponentsBuilder ;
10
15
16
+ import java .net .URI ;
11
17
import java .util .List ;
12
- import java .util .NoSuchElementException ;
13
18
14
19
@ RestController
15
- @ RequestMapping ("/lists/{shopplistId }/items" )
20
+ @ RequestMapping ("/lists/{listId }/items" )
16
21
public class ListItemController {
17
22
18
23
@ Autowired
19
24
private ListItemService service ;
20
25
21
- @ Operation (description = "Return all ListItems" )
26
+ @ Autowired
27
+ ListItemMapper listItemMapper ;
28
+
29
+ @ Operation (summary = "Get a specific ListItem by its ID within a ShoppingList" )
30
+ @ GetMapping ("/{id}" )
31
+ public ResponseEntity <ListItemResponseDTO > getListItemById (
32
+ @ PathVariable Long id ) {
33
+
34
+ ListItem listItem = service .findListItemById (id );
35
+
36
+ ListItemResponseDTO responseDTO = listItemMapper .toResponseDTO (listItem );
37
+ return HttpResponseUtil .ok (responseDTO );
38
+ }
39
+
40
+
41
+ @ Operation (description = "Return all ListItems for a specific ShoppingList" )
22
42
@ GetMapping
23
- public ResponseEntity <List <ListItem >> getAllListItems () {
24
- try {
25
- List <ListItem > ListItems = service .findAll ();
26
- return HttpResponseUtil .ok (ListItems );
27
- } catch (Exception e ) {
28
- return HttpResponseUtil .internalServerError ();
29
- }
43
+ public ResponseEntity <List <ListItemResponseDTO >> getAllListItemsByListId (@ PathVariable Long listId ) {
44
+ List <ListItem > listItems = service .findAll (listId );
45
+
46
+ List <ListItemResponseDTO > responseDTOs = listItems .stream ()
47
+ .map (listItemMapper ::toResponseDTO )
48
+ .toList ();
49
+
50
+ return HttpResponseUtil .ok (responseDTOs );
30
51
}
31
52
32
53
@ Operation (summary = "Add a new ListItem" )
33
54
@ PostMapping
34
- public ResponseEntity <ListItem > addListItem (@ RequestBody ListItem ListItem ) {
35
- try {
36
- ListItem addedListItem = service .addShoppItemList (ListItem );
37
- return HttpResponseUtil .created (addedListItem );
38
- } catch (IllegalArgumentException e ) {
39
- return HttpResponseUtil .badRequest (ListItem );
40
- }
55
+ public ResponseEntity <ListItemResponseDTO > addListItem (
56
+ @ Valid @ RequestBody ListItemRequestDTO requestDTO ) {
57
+
58
+ ListItem listItem = listItemMapper .toEntity (requestDTO );
59
+ ListItem addedListItem = service .addShoppItemList (listItem );
60
+ ListItemResponseDTO responseDTO = listItemMapper .toResponseDTO (addedListItem );
61
+
62
+ URI location = ServletUriComponentsBuilder
63
+ .fromCurrentRequest ()
64
+ .path ("/{id}" )
65
+ .buildAndExpand (addedListItem .getId ())
66
+ .toUri ();
67
+
68
+ return ResponseEntity .created (location ).body (responseDTO );
41
69
}
42
70
43
71
@ Operation (summary = "Delete a ListItem by id" )
44
72
@ DeleteMapping ("/{id}" )
45
- public ResponseEntity <Void > deleteListItem (@ PathVariable Long id ) {
46
- try {
47
- service .removeList (id );
48
- return HttpResponseUtil .noContent ();
49
- } catch (NoSuchElementException exception ) {
50
- return HttpResponseUtil .notFound ();
51
- }
73
+ public ResponseEntity <Void > deleteListItem (
74
+ @ PathVariable Long id ) {
75
+
76
+ service .removeList (id );
77
+ return HttpResponseUtil .noContent ();
52
78
}
53
79
54
80
@ Operation (summary = "Update a ListItem" )
55
- @ PutMapping
56
- public ResponseEntity <ListItem > updateListItem (@ RequestBody ListItem ListItem ) {
57
- try {
58
- service .editList (ListItem );
59
- return HttpResponseUtil .ok (ListItem );
60
- } catch (NoSuchElementException noSuchElementException ) {
61
- return HttpResponseUtil .notFound ();
62
- } catch (IllegalArgumentException illegalArgumentException ) {
63
- return HttpResponseUtil .badRequest (ListItem );
64
- }
81
+ @ PutMapping ("/{id}" )
82
+ public ResponseEntity <ListItemResponseDTO > updateListItem (
83
+ @ PathVariable Long id ,
84
+ @ Valid @ RequestBody ListItemRequestDTO requestDTO ) {
85
+ ListItem existingListItem = service .findListItemById (id );
86
+
87
+ listItemMapper .updateEntityFromDto (requestDTO , existingListItem );
88
+
89
+ ListItem updatedListItem = service .editList (existingListItem );
90
+ ListItemResponseDTO responseDTO = listItemMapper .toResponseDTO (updatedListItem );
91
+ return HttpResponseUtil .ok (responseDTO );
65
92
}
66
- }
93
+ }
0 commit comments