diff --git a/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/MediaItemRequest.java b/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/MediaItemRequest.java index 3cdc9ee9b..74552dbeb 100644 --- a/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/MediaItemRequest.java +++ b/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/MediaItemRequest.java @@ -33,7 +33,7 @@ public class MediaItemRequest { public static MediaItem asMediaItem(MediaItemRequest request) { var id = request.id != null ? request.id : UUID.randomUUID(); - switch (request.type.toUpperCase()) { + switch (request.type.toLowerCase()) { case "book" -> { return new Book(id, request.title, request.isbn, List.of(request.authors), request.pages); } 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 a393a53b9..31d112382 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,11 +4,19 @@ 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 java.util.UUID; +import org.springframework.http.HttpStatus; +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 @@ -29,4 +37,44 @@ public GetMediaItemsResponse getItems() { var response = GetMediaItemsResponse.builder().items(responseItems).build(); return response; } + + @GetMapping("/items/{id}") + public ResponseEntity getItem(@PathVariable UUID id) { + String enteredId = id.toString(); + Set items = library.search(SearchCriteria.builder().id(enteredId).build()); + + if (items.isEmpty()) { + return ResponseEntity.status(HttpStatus.NOT_FOUND).build(); + } + MediaItem item = items.iterator().next(); + MediaItemResponse response = MediaItemResponse.from(item); + return ResponseEntity.ok(response); + } + + @DeleteMapping("/items/{id}") + public ResponseEntity deleteItem(@PathVariable UUID id) { + Set items = library.search(SearchCriteria.builder().build()); + List itemToDelete = + items.stream() + .map(MediaItemResponse::from) // Transform the original objects + .filter(item -> item.getId().equals(id)) + .toList(); + if (itemToDelete.isEmpty()) { + return ResponseEntity.status(HttpStatus.NOT_FOUND).build(); + } + library.removeMediaItem(id, librarian); + return ResponseEntity.status(HttpStatus.NO_CONTENT).build(); + } + + @PostMapping("/items") + public CreateMediaItemResponse addsItem( + @Valid @RequestBody CreateMediaItemRequest mediaItemRequest) { + + MediaItem mediaItem = MediaItemRequest.asMediaItem(mediaItemRequest.getItem()); + library.addMediaItem(mediaItem, librarian); + var response = + CreateMediaItemResponse.builder().item(getItem(mediaItem.getId()).getBody()).build(); + + return response; + } }