diff --git a/lesson_26/api/java/api_app/package-lock.json b/lesson_26/api/java/api_app/package-lock.json new file mode 100644 index 000000000..06e0359a3 --- /dev/null +++ b/lesson_26/api/java/api_app/package-lock.json @@ -0,0 +1,6 @@ +{ + "name": "api_app", + "lockfileVersion": 3, + "requires": true, + "packages": {} +} 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..214a8dc10 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 @@ -1,16 +1,26 @@ package com.codedifferently.lesson26.web; -import com.codedifferently.lesson26.library.Librarian; -import com.codedifferently.lesson26.library.Library; -import com.codedifferently.lesson26.library.MediaItem; -import com.codedifferently.lesson26.library.search.SearchCriteria; import java.io.IOException; import java.util.List; import java.util.Set; + +import org.hibernate.validator.constraints.UUID; +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.lesson26.library.Librarian; +import com.codedifferently.lesson26.library.Library; +import com.codedifferently.lesson26.library.MediaItem; +import com.codedifferently.lesson26.library.search.SearchCriteria; + +import jakarta.validation.Valid; + @RestController @CrossOrigin public class MediaItemsController { @@ -29,4 +39,35 @@ public GetMediaItemsResponse getItems() { var response = GetMediaItemsResponse.builder().items(responseItems).build(); return response; } + + @PostMapping("/items") + public ResponseEntity postItems( + @Valid @RequestBody CreateMediaItemRequest request) { + MediaItemRequest itemRequest = request.getItem(); + MediaItem item = MediaItemRequest.asMediaItem(itemRequest); + library.addMediaItem(item, librarian); + MediaItemResponse response = MediaItemResponse.from(item); + return ResponseEntity.ok(CreateMediaItemResponse.builder().item(response).build()); + } + + @GetMapping("/items/{id}") + public ResponseEntity getItemsId(@PathVariable String id) { + Set items = library.search(SearchCriteria.builder().id(id).build()); + if (items.isEmpty()) { + return ResponseEntity.notFound().build(); + } + MediaItemResponse responseItem = items.stream().map(MediaItemResponse::from).iterator().next(); + return ResponseEntity.ok(GetMediaItemsResponse.builder().item(responseItem).build()); + } + + @DeleteMapping("/items/{id}") + public ResponseEntity deletebById(@PathVariable UUID id) { + Set items = library.search(SearchCriteria.builder().id(id.toString()).build()); + MediaItem item = items.iterator().next(); + if(items.isEmpty()){ + return ResponseEntity.notFound().build(); + } + library.removeMediaItem(item, librarian); + return ResponseEntity.noContent().build(); + } }