Skip to content

Commit 261da03

Browse files
author
Mohamed
committed
Feat: Added functions postItems, getMediaItem, and deleteMediaItem
1 parent 41528e9 commit 261da03

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed

lesson_16/api/api_app/src/main/java/com/codedifferently/lesson16/web/MediaItemsController.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,20 @@
44
import com.codedifferently.lesson16.library.Library;
55
import com.codedifferently.lesson16.library.MediaItem;
66
import com.codedifferently.lesson16.library.search.SearchCriteria;
7+
import jakarta.validation.Valid;
78
import java.io.IOException;
89
import java.util.List;
910
import java.util.Set;
11+
import java.util.UUID;
12+
import org.springframework.http.HttpStatus;
13+
import org.springframework.http.ResponseEntity;
14+
import org.springframework.web.bind.annotation.DeleteMapping;
1015
import org.springframework.web.bind.annotation.GetMapping;
16+
import org.springframework.web.bind.annotation.PathVariable;
17+
import org.springframework.web.bind.annotation.PostMapping;
18+
import org.springframework.web.bind.annotation.RequestBody;
1119
import org.springframework.web.bind.annotation.RestController;
20+
import org.springframework.web.server.ResponseStatusException;
1221

1322
@RestController
1423
public class MediaItemsController {
@@ -27,4 +36,31 @@ public GetMediaItemsResponse getItems() {
2736
var response = GetMediaItemsResponse.builder().items(responseItems).build();
2837
return response;
2938
}
39+
40+
@PostMapping("/items")
41+
public CreateMediaItemResponse postItem(@Valid @RequestBody CreateMediaItemRequest req) {
42+
MediaItem media = MediaItemRequest.asMediaItem(req.getItem());
43+
library.addMediaItem(media, librarian);
44+
return CreateMediaItemResponse.builder().item(MediaItemResponse.from(media)).build();
45+
}
46+
47+
@GetMapping("/items/{id}")
48+
public GetMediaItemsResponse getMediaItem(@PathVariable String id) {
49+
Set<MediaItem> items = library.search(SearchCriteria.builder().id(id).build());
50+
if (items.isEmpty()) {
51+
throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Media item not found");
52+
}
53+
List<MediaItemResponse> responseItems = items.stream().map(MediaItemResponse::from).toList();
54+
var response = GetMediaItemsResponse.builder().items(responseItems).build();
55+
return response;
56+
}
57+
58+
@DeleteMapping("/items/{id}")
59+
public ResponseEntity<Void> deleteMediaItem(@PathVariable String id) {
60+
if (!library.hasMediaItem(UUID.fromString(id))) {
61+
throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Media item not found");
62+
}
63+
library.removeMediaItem(UUID.fromString(id), librarian);
64+
return ResponseEntity.noContent().build();
65+
}
3066
}

0 commit comments

Comments
 (0)