diff --git a/lesson_26/api/java/api_app/build.gradle.kts b/lesson_26/api/java/api_app/build.gradle.kts index a282111f8..1daa71bc0 100644 --- a/lesson_26/api/java/api_app/build.gradle.kts +++ b/lesson_26/api/java/api_app/build.gradle.kts @@ -5,6 +5,7 @@ plugins { id("com.diffplug.spotless") version "6.25.0" id("org.springframework.boot") version "3.4.0" id("com.adarshr.test-logger") version "4.0.0" + // id("io.freefair.lombok") version "8.6" } apply(plugin = "io.spring.dependency-management") diff --git a/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/library/Library.java b/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/library/Library.java index 2071a60f3..f6149a6b1 100644 --- a/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/library/Library.java +++ b/lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/library/Library.java @@ -6,6 +6,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.HashSet; +import java.util.List; import java.util.Map; import java.util.Set; import java.util.UUID; @@ -297,4 +298,12 @@ public String toString() { + guestsById + '}'; } + + public List getAllItems() { + throw new UnsupportedOperationException("Not supported yet."); + } + + public Object getAnItem(UUID id) { + throw new UnsupportedOperationException("Not supported yet."); + } } 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..acb9c675e 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,18 @@ 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.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 @@ -31,4 +37,39 @@ public ResponseEntity getItems() { var response = GetMediaItemsResponse.builder().items(responseItems).build(); return ResponseEntity.ok(response); } + + @PostMapping("/items") + public ResponseEntity postItem( + @Valid @RequestBody CreateMediaItemRequest request) { + MediaItemRequest itemRequest = request.getItem(); + MediaItem newItem = MediaItemRequest.asMediaItem(itemRequest); + library.addMediaItem(newItem, librarian); + MediaItemResponse itemResponse = MediaItemResponse.from(newItem); + CreateMediaItemResponse response = CreateMediaItemResponse.builder().item(itemResponse).build(); + return ResponseEntity.ok(response); + } + + @GetMapping("/items/{id}") + public ResponseEntity getItemById(@PathVariable UUID id) { + SearchCriteria criteria = SearchCriteria.builder().id(id.toString()).build(); + Set items = library.search(criteria); + + if (!items.isEmpty()) { + MediaItem item = items.iterator().next(); + MediaItemResponse response = MediaItemResponse.from(item); + return ResponseEntity.ok(response); + } else { + return ResponseEntity.notFound().build(); + } + } + + @DeleteMapping("/items/{id}") + public ResponseEntity deleteMediaItem(@PathVariable("id") UUID id) { + try { + library.removeMediaItem(id, librarian); + return ResponseEntity.noContent().build(); + } catch (Exception e) { + return ResponseEntity.notFound().build(); + } + } }