diff --git a/lesson_23/api/java/api_app/src/main/java/com/codedifferently/lesson23/web/GetMediaItemsResponse.java b/lesson_23/api/java/api_app/src/main/java/com/codedifferently/lesson23/web/GetMediaItemsResponse.java index a9b1e6d41..528169ade 100644 --- a/lesson_23/api/java/api_app/src/main/java/com/codedifferently/lesson23/web/GetMediaItemsResponse.java +++ b/lesson_23/api/java/api_app/src/main/java/com/codedifferently/lesson23/web/GetMediaItemsResponse.java @@ -1,6 +1,7 @@ package com.codedifferently.lesson23.web; import java.util.List; + import lombok.Builder; import lombok.Data; import lombok.Singular; diff --git a/lesson_23/api/java/api_app/src/main/java/com/codedifferently/lesson23/web/MediaItemsController.java b/lesson_23/api/java/api_app/src/main/java/com/codedifferently/lesson23/web/MediaItemsController.java index 7efa0b2f8..e7d536ea3 100644 --- a/lesson_23/api/java/api_app/src/main/java/com/codedifferently/lesson23/web/MediaItemsController.java +++ b/lesson_23/api/java/api_app/src/main/java/com/codedifferently/lesson23/web/MediaItemsController.java @@ -1,17 +1,24 @@ package com.codedifferently.lesson23.web; - -import com.codedifferently.lesson23.library.Librarian; -import com.codedifferently.lesson23.library.Library; -import com.codedifferently.lesson23.library.MediaItem; -import com.codedifferently.lesson23.library.search.SearchCriteria; 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; +import com.codedifferently.lesson23.library.Librarian; +import com.codedifferently.lesson23.library.Library; +import com.codedifferently.lesson23.library.MediaItem; +import com.codedifferently.lesson23.library.search.SearchCriteria; + +import jakarta.validation.Valid; + @RestController @CrossOrigin public class MediaItemsController { @@ -31,4 +38,44 @@ public ResponseEntity getItems() { var response = GetMediaItemsResponse.builder().items(responseItems).build(); return ResponseEntity.ok(response); } -} + + @GetMapping("/items/{id}") + public ResponseEntity getItemById(@PathVariable String id) { + Set items = library.search(SearchCriteria.builder().id(id).build()); + if (items.isEmpty()) { + return ResponseEntity.notFound().build(); + } + MediaItem item = items.iterator().next(); + var response = CreateMediaItemResponse.builder() + .item(MediaItemResponse.from(item)) + .build(); + return ResponseEntity.ok(response); + } + + @PostMapping("/items") + public ResponseEntity addItem(@Valid @RequestBody CreateMediaItemRequest request) { + try { + MediaItem mediaItem = MediaItemRequest.asMediaItem(request.getItem()); + library.addMediaItem(mediaItem, librarian); + CreateMediaItemResponse response = CreateMediaItemResponse.builder() + .item(MediaItemResponse.from(mediaItem)) + .build(); + return ResponseEntity.ok(response); + } catch (Exception e) { + return ResponseEntity.badRequest().build(); + } + } + + @DeleteMapping("/items/{id}") + public ResponseEntity deleteItem(@PathVariable String id) { + try { + java.util.UUID uuid = java.util.UUID.fromString(id); + library.removeMediaItem(uuid, librarian); + return ResponseEntity.noContent().build(); + } catch (IllegalArgumentException e) { + return ResponseEntity.notFound().build(); + } catch (Exception e) { + return ResponseEntity.notFound().build(); + } + } +} \ No newline at end of file