Skip to content

Commit f872cc6

Browse files
committed
refactor: update ListItemController and related classes for improved DTO usage and response handling
1 parent 9636fc3 commit f872cc6

File tree

3 files changed

+68
-37
lines changed

3 files changed

+68
-37
lines changed
Lines changed: 62 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,66 +1,93 @@
11
package com.omatheusmesmo.shoppmate.list.controller;
22

3+
import com.omatheusmesmo.shoppmate.list.dtos.ListItemRequestDTO;
4+
import com.omatheusmesmo.shoppmate.list.dtos.ListItemResponseDTO;
35
import com.omatheusmesmo.shoppmate.list.entity.ListItem;
6+
import com.omatheusmesmo.shoppmate.list.mapper.ListItemMapper;
47
import com.omatheusmesmo.shoppmate.list.service.ListItemService;
58
import com.omatheusmesmo.shoppmate.utils.HttpResponseUtil;
69
import io.swagger.v3.oas.annotations.Operation;
10+
import jakarta.validation.Valid;
711
import org.springframework.beans.factory.annotation.Autowired;
812
import org.springframework.http.ResponseEntity;
913
import org.springframework.web.bind.annotation.*;
14+
import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
1015

16+
import java.net.URI;
1117
import java.util.List;
12-
import java.util.NoSuchElementException;
1318

1419
@RestController
15-
@RequestMapping("/lists/{shopplistId}/items")
20+
@RequestMapping("/lists/{listId}/items")
1621
public class ListItemController {
1722

1823
@Autowired
1924
private ListItemService service;
2025

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")
2242
@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);
3051
}
3152

3253
@Operation(summary = "Add a new ListItem")
3354
@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);
4169
}
4270

4371
@Operation(summary = "Delete a ListItem by id")
4472
@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();
5278
}
5379

5480
@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);
6592
}
66-
}
93+
}

src/main/java/com/omatheusmesmo/shoppmate/list/repository/ListItemRepository.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,11 @@
44
import org.springframework.data.jpa.repository.JpaRepository;
55
import org.springframework.stereotype.Repository;
66

7+
import java.util.List;
8+
79
@Repository
810
public interface ListItemRepository extends JpaRepository<ListItem, Long> {
911

12+
List<ListItem> findByShoppListId(Long shopplistId);
13+
1014
}

src/main/java/com/omatheusmesmo/shoppmate/list/service/ListItemService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ public ListItem editList(ListItem ListItem) {
7272
return ListItem;
7373
}
7474

75-
public List<ListItem> findAll() {
76-
return ListItemRepository.findAll();
75+
public List<ListItem> findAll(Long idList) {
76+
return ListItemRepository.findByShoppListId(idList);
7777
}
7878
}

0 commit comments

Comments
 (0)