From b35249f2323ba9339e62769f675f700f1353241e Mon Sep 17 00:00:00 2001 From: kjknows Date: Mon, 8 Apr 2024 15:46:01 +0000 Subject: [PATCH 1/2] feat: added methods to MediaItemsController file to pass tests --- .../lesson16/web/MediaItemsController.java | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/lesson_16/api/api_app/src/main/java/com/codedifferently/lesson16/web/MediaItemsController.java b/lesson_16/api/api_app/src/main/java/com/codedifferently/lesson16/web/MediaItemsController.java index cae5ff06..02461077 100644 --- a/lesson_16/api/api_app/src/main/java/com/codedifferently/lesson16/web/MediaItemsController.java +++ b/lesson_16/api/api_app/src/main/java/com/codedifferently/lesson16/web/MediaItemsController.java @@ -4,11 +4,20 @@ import com.codedifferently.lesson16.library.Library; import com.codedifferently.lesson16.library.MediaItem; import com.codedifferently.lesson16.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.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 org.springframework.web.server.ResponseStatusException; @RestController public class MediaItemsController { @@ -27,4 +36,35 @@ public GetMediaItemsResponse getItems() { var response = GetMediaItemsResponse.builder().items(responseItems).build(); return response; } + + @PostMapping("/items") + public CreateMediaItemResponse postItem(@Valid @RequestBody CreateMediaItemRequest request) { + MediaItem item = MediaItemRequest.asMediaItem(request.getItem()); + library.addMediaItem(item, librarian); + var response = CreateMediaItemResponse.builder().item(MediaItemResponse.from(item)).build(); + return response; + } + + @GetMapping("/items/{id}") + public GetMediaItemsResponse getItem(@PathVariable String id) { + SearchCriteria criteria = SearchCriteria.builder().id(id).build(); + Set items = library.search(criteria); + + if (items.isEmpty()) { + throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Media item not found"); + } + + List responseItems = items.stream().map(MediaItemResponse::from).toList(); + return GetMediaItemsResponse.builder().items(responseItems).build(); + } + + @DeleteMapping("/items/{id}") + public ResponseEntity deleteItem(@PathVariable String id) { + if (!library.hasMediaItem(UUID.fromString(id))) { + throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Media item not found"); + } + + library.removeMediaItem(UUID.fromString(id), librarian); + return ResponseEntity.noContent().build(); + } } From 92563ecb89aaad79ae874c8411f5087d322bafba Mon Sep 17 00:00:00 2001 From: kjknows Date: Mon, 8 Apr 2024 15:48:57 +0000 Subject: [PATCH 2/2] feat:adding mediaItemController --- .../lesson16/web/MediaItemsController.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/lesson_16/api/api_app/src/main/java/com/codedifferently/lesson16/web/MediaItemsController.java b/lesson_16/api/api_app/src/main/java/com/codedifferently/lesson16/web/MediaItemsController.java index 02461077..b75bdd6c 100644 --- a/lesson_16/api/api_app/src/main/java/com/codedifferently/lesson16/web/MediaItemsController.java +++ b/lesson_16/api/api_app/src/main/java/com/codedifferently/lesson16/web/MediaItemsController.java @@ -1,14 +1,10 @@ package com.codedifferently.lesson16.web; -import com.codedifferently.lesson16.library.Librarian; -import com.codedifferently.lesson16.library.Library; -import com.codedifferently.lesson16.library.MediaItem; -import com.codedifferently.lesson16.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.DeleteMapping; @@ -19,6 +15,13 @@ import org.springframework.web.bind.annotation.RestController; import org.springframework.web.server.ResponseStatusException; +import com.codedifferently.lesson16.library.Librarian; +import com.codedifferently.lesson16.library.Library; +import com.codedifferently.lesson16.library.MediaItem; +import com.codedifferently.lesson16.library.search.SearchCriteria; + +import jakarta.validation.Valid; + @RestController public class MediaItemsController { private final Library library; @@ -36,6 +39,7 @@ public GetMediaItemsResponse getItems() { var response = GetMediaItemsResponse.builder().items(responseItems).build(); return response; } + @PostMapping("/items") public CreateMediaItemResponse postItem(@Valid @RequestBody CreateMediaItemRequest request) {