Skip to content

Commit e53c3bd

Browse files
committed
feat: Implemented Web API using REST - LJ Lesson 26
1 parent 3f60d9d commit e53c3bd

File tree

1 file changed

+57
-4
lines changed

1 file changed

+57
-4
lines changed

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

Lines changed: 57 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,27 @@
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;
95
import java.util.Set;
6+
import java.util.UUID;
7+
8+
import org.springframework.http.ResponseEntity;
109
import org.springframework.web.bind.annotation.CrossOrigin;
10+
import org.springframework.web.bind.annotation.DeleteMapping;
1111
import org.springframework.web.bind.annotation.GetMapping;
12+
import org.springframework.web.bind.annotation.PathVariable;
13+
import org.springframework.web.bind.annotation.PostMapping;
1214
import org.springframework.web.bind.annotation.RestController;
1315

16+
import com.codedifferently.lesson26.library.Librarian;
17+
import com.codedifferently.lesson26.library.Library;
18+
import com.codedifferently.lesson26.library.MediaItem;
19+
import com.codedifferently.lesson26.library.search.SearchCriteria;
20+
21+
import io.swagger.v3.oas.annotations.parameters.RequestBody;
22+
import jakarta.validation.Valid;
23+
24+
1425
@RestController
1526
@CrossOrigin
1627
public class MediaItemsController {
@@ -26,7 +37,49 @@ public MediaItemsController(Library library) throws IOException {
2637
public GetMediaItemsResponse getItems() {
2738
Set<MediaItem> items = library.search(SearchCriteria.builder().build());
2839
List<MediaItemResponse> responseItems = items.stream().map(MediaItemResponse::from).toList();
40+
2941
var response = GetMediaItemsResponse.builder().items(responseItems).build();
3042
return response;
3143
}
44+
45+
@GetMapping("/items/{id}")
46+
public ResponseEntity<MediaItemResponse> getItem(@PathVariable("id") UUID id) {
47+
SearchCriteria searchCriteria = SearchCriteria.builder().id(id.toString()).build();
48+
49+
Set<MediaItem> foundItem = library.search(searchCriteria);
50+
51+
if (foundItem.isEmpty()) {
52+
return ResponseEntity.notFound().build();
53+
}
54+
55+
MediaItem item = foundItem.iterator().next();
56+
MediaItemResponse response = MediaItemResponse.from(item);
57+
58+
return ResponseEntity.ok(response);
59+
}
60+
61+
@DeleteMapping("/items/{id}")
62+
public ResponseEntity<Void> deleteItem(@PathVariable("id") UUID id) {
63+
SearchCriteria searchCriteria = SearchCriteria.builder().id(id.toString()).build();
64+
65+
Set<MediaItem> foundItem = library.search(searchCriteria);
66+
67+
if (foundItem.isEmpty()) {
68+
return ResponseEntity.notFound().build();
69+
}
70+
71+
MediaItem item = foundItem.iterator().next();
72+
library.removeMediaItem(item, librarian);
73+
return ResponseEntity.noContent().build();
74+
}
75+
76+
@PostMapping("/items")
77+
public CreateMediaItemResponse addsItem(@Valid @RequestBody CreateMediaItemRequest request) {
78+
MediaItemRequest itemRequest = request.getItem();
79+
MediaItem item = MediaItemRequest.asMediaItem(itemRequest);
80+
library.addMediaItem(item, librarian);
81+
82+
CreateMediaItemResponse res = CreateMediaItemResponse.builder().item(getItem(item.getId()).getBody()).build();
83+
return res;
84+
}
3285
}

0 commit comments

Comments
 (0)