Skip to content

Commit 8497748

Browse files
committed
feat:implemented get/post/delete fto lesson_26
1 parent afa6a7d commit 8497748

File tree

1 file changed

+40
-22
lines changed

1 file changed

+40
-22
lines changed
Lines changed: 40 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,28 @@
11
package com.codedifferently.lesson26.web;
22

3-
import com.codedifferently.lesson26.library.Librarian;
4-
import com.codedifferently.lesson26.library.Library;
5-
import com.codedifferently.lesson26.library.MediaItem;
6-
import com.codedifferently.lesson26.library.search.SearchCriteria;
7-
import io.swagger.v3.oas.annotations.parameters.RequestBody;
83
import java.io.IOException;
94
import java.util.List;
10-
import java.util.Map;
115
import java.util.Set;
6+
import java.util.UUID;
7+
128
import org.springframework.http.HttpStatus;
139
import org.springframework.http.ResponseEntity;
1410
import org.springframework.web.bind.annotation.CrossOrigin;
11+
import org.springframework.web.bind.annotation.DeleteMapping;
1512
import org.springframework.web.bind.annotation.GetMapping;
1613
import org.springframework.web.bind.annotation.PathVariable;
1714
import org.springframework.web.bind.annotation.PostMapping;
1815
import org.springframework.web.bind.annotation.RestController;
1916

17+
import com.codedifferently.lesson26.library.Librarian;
18+
import com.codedifferently.lesson26.library.Library;
19+
import com.codedifferently.lesson26.library.MediaItem;
20+
import com.codedifferently.lesson26.library.exceptions.MediaItemCheckedOutException;
21+
import com.codedifferently.lesson26.library.search.SearchCriteria;
22+
23+
import io.swagger.v3.oas.annotations.parameters.RequestBody;
24+
import jakarta.validation.Valid;
25+
2026
@RestController
2127
@CrossOrigin
2228
public class MediaItemsController {
@@ -36,10 +42,10 @@ public GetMediaItemsResponse getItems() {
3642
return response;
3743
}
3844

39-
// Get item
45+
4046
@GetMapping("/items/{id}")
41-
public ResponseEntity<MediaItemResponse> getItem(@PathVariable String id) {
42-
SearchCriteria criteria = SearchCriteria.builder().id(id).build();
47+
public ResponseEntity<MediaItemResponse> getItem(@PathVariable UUID id) {
48+
SearchCriteria criteria = SearchCriteria.builder().id(id.toString()).build();
4349
Set<MediaItem> items = library.search(criteria);
4450
if (items.isEmpty()) {
4551
return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
@@ -50,22 +56,34 @@ public ResponseEntity<MediaItemResponse> getItem(@PathVariable String id) {
5056
}
5157
}
5258

53-
// post item
5459
@PostMapping("/items")
55-
public ResponseEntity<?> addsItem(@RequestBody CreateMediaItemRequest request) {
56-
if (request == null || request.getItem() == null) {
57-
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Missing item in the body");
60+
61+
public CreateMediaItemResponse addsItem(@Valid @RequestBody CreateMediaItemRequest request) {
62+
MediaItemRequest itemRequest = request.getItem();
63+
MediaItem item = MediaItemRequest.asMediaItem(itemRequest);
64+
library.addMediaItem(item, librarian);
65+
66+
CreateMediaItemResponse response =
67+
CreateMediaItemResponse.builder().item(getItem(item.getId()).getBody()).build();
68+
69+
return response;
70+
}
71+
@DeleteMapping("/items/{id}")
72+
public ResponseEntity<Void> deleteItem(@PathVariable String id) {
73+
SearchCriteria criteria = SearchCriteria.builder().id(id).build();
74+
Set<MediaItem> items = library.search(criteria);
75+
76+
if (items.isEmpty()) {
77+
return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
5878
}
59-
try {
60-
MediaItem newItem = MediaItemRequest.asMediaItem(request.getItem());
6179

62-
library.addMediaItem(newItem, librarian);
80+
MediaItem item = items.iterator().next();
6381

64-
return ResponseEntity.ok(Map.of("item", MediaItemResponse.from(newItem)));
65-
} catch (IllegalArgumentException e) {
66-
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(e.getMessage());
82+
try {
83+
library.removeMediaItem(item, librarian);
84+
return ResponseEntity.noContent().build();
85+
} catch (MediaItemCheckedOutException e) {
86+
return ResponseEntity.status(HttpStatus.CONFLICT).body(null);
6787
}
6888
}
69-
}
70-
71-
// Delete
89+
}

0 commit comments

Comments
 (0)