Skip to content

Commit 228dabc

Browse files
committed
feat:add MediaItemsController.java with all features passing For Lesson_26.
1 parent 6688bef commit 228dabc

File tree

1 file changed

+59
-4
lines changed

1 file changed

+59
-4
lines changed

lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/web/MediaItemsController.java

Lines changed: 59 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,26 @@
11
package com.codedifferently.lesson26.web;
22

3-
import com.codedifferently.lesson26.library.Librarian;
4-
import com.codedifferently.lesson26.library.Library;
5-
import com.codedifferently.lesson26.library.MediaItem;
6-
import com.codedifferently.lesson26.library.search.SearchCriteria;
73
import java.io.IOException;
84
import java.util.List;
5+
import java.util.Optional;
96
import java.util.Set;
7+
import java.util.UUID;
8+
9+
import org.springframework.http.HttpStatus;
1010
import org.springframework.http.ResponseEntity;
1111
import org.springframework.web.bind.annotation.CrossOrigin;
12+
import org.springframework.web.bind.annotation.DeleteMapping;
1213
import org.springframework.web.bind.annotation.GetMapping;
14+
import org.springframework.web.bind.annotation.PathVariable;
15+
import org.springframework.web.bind.annotation.PostMapping;
16+
import org.springframework.web.bind.annotation.RequestBody;
1317
import org.springframework.web.bind.annotation.RestController;
1418

19+
import com.codedifferently.lesson26.library.Librarian;
20+
import com.codedifferently.lesson26.library.Library;
21+
import com.codedifferently.lesson26.library.MediaItem;
22+
import com.codedifferently.lesson26.library.search.SearchCriteria;
23+
1524
@RestController
1625
@CrossOrigin
1726
public class MediaItemsController {
@@ -31,4 +40,50 @@ public ResponseEntity<GetMediaItemsResponse> getItems() {
3140
var response = GetMediaItemsResponse.builder().items(responseItems).build();
3241
return ResponseEntity.ok(response);
3342
}
43+
@PostMapping("/items")
44+
public ResponseEntity<MediaItemResponse> createItem(@RequestBody MediaItemRequest request) {
45+
MediaItem newItem = MediaItemRequest.asMediaItem(request);
46+
47+
Librarian librarian = new Librarian("system", "[email protected]");
48+
49+
library.addMediaItem(newItem, librarian);
50+
51+
return new ResponseEntity<>(MediaItemResponse.from(newItem), HttpStatus.CREATED);
52+
}
53+
54+
@GetMapping("/items/{id}")
55+
public ResponseEntity<MediaItemResponse> getItemById(@PathVariable UUID id) {
56+
Set<MediaItem> allItems = library.search(SearchCriteria.builder().build());
57+
58+
Optional<MediaItem> itemOpt = allItems.stream()
59+
.filter(item -> item.getId().equals(id))
60+
.findFirst();
61+
62+
if (itemOpt.isEmpty()) {
63+
return ResponseEntity.notFound().build();
64+
}
65+
66+
MediaItemResponse response = MediaItemResponse.from(itemOpt.get());
67+
return ResponseEntity.ok(response);
68+
}
69+
70+
71+
@DeleteMapping("/items/{id}")
72+
public ResponseEntity<Void> deleteItemById(@PathVariable UUID id) {
73+
Optional<MediaItem> itemOpt = library.search(SearchCriteria.builder().build())
74+
.stream()
75+
.filter(item -> item.getId().equals(id))
76+
.findFirst();
77+
78+
if (itemOpt.isEmpty()) {
79+
return ResponseEntity.notFound().build();
80+
}
81+
82+
MediaItem item = itemOpt.get();
83+
Librarian librarian = new Librarian("system", "[email protected]"); // placeholder
84+
library.removeMediaItem(item, librarian);
85+
86+
return ResponseEntity.noContent().build(); // 204 No Content
87+
}
88+
3489
}

0 commit comments

Comments
 (0)