diff --git a/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/MediaItemsController.java b/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/MediaItemsController.java index bbbc45e41..84955d6f6 100644 --- a/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/MediaItemsController.java +++ b/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/MediaItemsController.java @@ -4,12 +4,17 @@ import com.codedifferently.lesson26.library.Library; import com.codedifferently.lesson26.library.MediaItem; import com.codedifferently.lesson26.library.search.SearchCriteria; +import jakarta.validation.Valid; import java.io.IOException; import java.util.List; import java.util.Set; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @RestController @@ -24,6 +29,8 @@ public MediaItemsController(Library library) throws IOException { this.librarian = library.getLibrarians().stream().findFirst().orElseThrow(); } + // Gets all media items. + @GetMapping("/items") public ResponseEntity getItems() { Set items = library.search(SearchCriteria.builder().build()); @@ -31,4 +38,44 @@ public ResponseEntity getItems() { var response = GetMediaItemsResponse.builder().items(responseItems).build(); return ResponseEntity.ok(response); } + + // + + @DeleteMapping("/items/{id}") + public ResponseEntity deleteItem(@PathVariable String id) { + Set items = library.search(SearchCriteria.builder().id(id).build()); + if (items.isEmpty()) { + return ResponseEntity.notFound().build(); // Return 404 if item is not found + } + MediaItem itemToDelete = items.iterator().next(); + library.removeMediaItem( + itemToDelete, librarian); // Assuming there's a method to remove items in the library + return ResponseEntity.noContent().build(); // Return 204 No Content if deletion is successful + } + + // + + @GetMapping("/items/{id}") + public ResponseEntity getItem(@PathVariable String id) { + Set items = library.search(SearchCriteria.builder().id(id).build()); + if (items.isEmpty()) { + return ResponseEntity.notFound().build(); // Return 404 if item is not found + } + MediaItem item = items.iterator().next(); + MediaItemResponse response = MediaItemResponse.from(item); + return ResponseEntity.ok(response); + } + + // + + @PostMapping("/items") + public ResponseEntity createItem( + @Valid @RequestBody CreateMediaItemRequest createRequest) { + MediaItemRequest itemRequest = createRequest.getItem(); + MediaItem newItem = MediaItemRequest.asMediaItem(itemRequest); + library.addMediaItem(newItem, this.librarian); + MediaItemResponse itemResponse = MediaItemResponse.from(newItem); + CreateMediaItemResponse response = CreateMediaItemResponse.builder().item(itemResponse).build(); + return ResponseEntity.ok(response); + } }