Skip to content

Commit 918a03a

Browse files
committed
feat: adds getters for getting a book by id, deleting a book by id and creating a new book.
1 parent ad5d3b8 commit 918a03a

File tree

1 file changed

+46
-1
lines changed

1 file changed

+46
-1
lines changed

lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/MediaItemsController.java

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,23 @@
44
import com.codedifferently.lesson26.library.Library;
55
import com.codedifferently.lesson26.library.MediaItem;
66
import com.codedifferently.lesson26.library.search.SearchCriteria;
7+
import jakarta.validation.Valid;
78
import java.io.IOException;
89
import java.util.List;
910
import java.util.Set;
11+
import java.util.UUID;
1012
import org.springframework.http.ResponseEntity;
1113
import org.springframework.web.bind.annotation.CrossOrigin;
14+
import org.springframework.web.bind.annotation.DeleteMapping;
1215
import org.springframework.web.bind.annotation.GetMapping;
16+
import org.springframework.web.bind.annotation.PathVariable;
17+
import org.springframework.web.bind.annotation.PostMapping;
18+
import org.springframework.web.bind.annotation.RequestBody;
1319
import org.springframework.web.bind.annotation.RestController;
1420

1521
@RestController
1622
@CrossOrigin
1723
public class MediaItemsController {
18-
1924
private final Library library;
2025
private final Librarian librarian;
2126

@@ -31,4 +36,44 @@ public ResponseEntity<GetMediaItemsResponse> getItems() {
3136
var response = GetMediaItemsResponse.builder().items(responseItems).build();
3237
return ResponseEntity.ok(response);
3338
}
39+
40+
@GetMapping("/items/{id}")
41+
public ResponseEntity<MediaItemResponse> getItemById(@PathVariable UUID id) {
42+
SearchCriteria criteria = SearchCriteria.builder().id(id.toString()).build();
43+
Set<MediaItem> items = library.search(criteria);
44+
45+
if (items.isEmpty()) {
46+
return ResponseEntity.notFound().build();
47+
} else {
48+
MediaItem item = items.iterator().next();
49+
MediaItemResponse response = MediaItemResponse.from(item);
50+
return ResponseEntity.ok(response);
51+
}
52+
}
53+
54+
@PostMapping("/items")
55+
public CreateMediaItemResponse addItem(@Valid @RequestBody CreateMediaItemRequest request) {
56+
MediaItemRequest itemCreation = request.getItem();
57+
MediaItem item = MediaItemRequest.asMediaItem(itemCreation);
58+
library.addMediaItem(item, librarian);
59+
60+
CreateMediaItemResponse response =
61+
CreateMediaItemResponse.builder().item(getItemById(item.getId()).getBody()).build();
62+
return response;
63+
}
64+
65+
@DeleteMapping("/items/{id}")
66+
public ResponseEntity<Void> deleteItem(@PathVariable UUID id) {
67+
SearchCriteria criteria = SearchCriteria.builder().id(id.toString()).build();
68+
Set<MediaItem> items = library.search(criteria);
69+
70+
if (items.isEmpty()) {
71+
return ResponseEntity.notFound().build();
72+
} else {
73+
MediaItem item = items.iterator().next();
74+
library.removeMediaItem(item, librarian);
75+
76+
return ResponseEntity.noContent().build();
77+
}
78+
}
3479
}

0 commit comments

Comments
 (0)