Skip to content

Commit f475a30

Browse files
feat: adds GET POST GET:id DELETE:id mappings
1 parent 8e2e97f commit f475a30

File tree

3 files changed

+62
-12
lines changed

3 files changed

+62
-12
lines changed

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.codedifferently.lesson26.web;
22

3+
import com.fasterxml.jackson.annotation.JsonProperty;
4+
35
import jakarta.validation.Valid;
46
import jakarta.validation.constraints.NotNull;
57
import lombok.AllArgsConstructor;
@@ -12,6 +14,6 @@
1214
@NoArgsConstructor
1315
@Builder
1416
public class CreateMediaItemRequest {
15-
@NotNull(message = "item is required") @Valid
17+
@NotNull(message = "item is required") @Valid @JsonProperty("item")
1618
private MediaItemRequest item;
1719
}

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

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import com.codedifferently.lesson26.library.Magazine;
66
import com.codedifferently.lesson26.library.MediaItem;
77
import com.codedifferently.lesson26.library.Newspaper;
8+
import com.fasterxml.jackson.annotation.JsonProperty;
9+
810
import jakarta.validation.constraints.NotBlank;
911
import java.util.List;
1012
import java.util.UUID;
@@ -18,17 +20,22 @@
1820
@NoArgsConstructor
1921
@Builder
2022
public class MediaItemRequest {
21-
23+
@JsonProperty("id")
2224
private UUID id;
25+
@JsonProperty("type")
2326
private String type;
27+
@JsonProperty("isbn")
2428
private String isbn;
25-
29+
@JsonProperty("title")
2630
@NotBlank(message = "Title is required")
2731
private String title;
28-
32+
@JsonProperty("authors")
2933
private String[] authors;
34+
@JsonProperty("edition")
3035
private String edition;
36+
@JsonProperty("pages")
3137
private int pages;
38+
@JsonProperty("runtime")
3239
private int runtime;
3340

3441
public static MediaItem asMediaItem(MediaItemRequest request) {

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

Lines changed: 49 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,22 @@
55
import com.codedifferently.lesson26.library.MediaItem;
66
import com.codedifferently.lesson26.library.search.SearchCriteria;
77

8-
import io.swagger.v3.oas.annotations.parameters.RequestBody;
8+
import jakarta.validation.Valid;
9+
10+
import org.springframework.web.bind.annotation.RequestBody;
11+
912

1013
import java.io.IOException;
1114
import java.util.List;
1215
import java.util.Set;
16+
import java.util.UUID;
17+
18+
import org.springframework.http.ResponseEntity;
19+
import org.springframework.web.bind.MethodArgumentNotValidException;
1320
import org.springframework.web.bind.annotation.CrossOrigin;
21+
import org.springframework.web.bind.annotation.DeleteMapping;
1422
import org.springframework.web.bind.annotation.GetMapping;
23+
import org.springframework.web.bind.annotation.PathVariable;
1524
import org.springframework.web.bind.annotation.PostMapping;
1625
import org.springframework.web.bind.annotation.RestController;
1726

@@ -34,21 +43,53 @@ public GetMediaItemsResponse getItems() {
3443
return response;
3544
}
3645

37-
@GetMapping("/items:id")
38-
public MediaItemResponse getItemById(){
39-
return null;
46+
@GetMapping("/items/{id}")
47+
public ResponseEntity<MediaItemResponse> getItemById(@PathVariable("id") UUID id) {
48+
String stringId = id.toString();
49+
SearchCriteria searchCriteria = SearchCriteria.builder().id(stringId).build();
50+
51+
Set<MediaItem> foundItems = library.search(searchCriteria);
52+
53+
if (foundItems.isEmpty()) {
54+
return ResponseEntity.notFound().build();
55+
}
56+
57+
MediaItem item = foundItems.iterator().next();
58+
MediaItemResponse response = MediaItemResponse.from(item);
59+
60+
return ResponseEntity.ok(response);
4061
}
4162

4263
@PostMapping("/items")
43-
public CreateMediaItemResponse createMediaItem(@RequestBody MediaItemRequest itemRequest) {
64+
public CreateMediaItemResponse createMediaItem(@RequestBody @Valid CreateMediaItemRequest request) throws MethodArgumentNotValidException {
65+
66+
MediaItemRequest itemRequest = request.getItem();
4467

4568

46-
var request = CreateMediaItemRequest.builder().item(itemRequest).build();
69+
System.out.println(request);
4770

48-
var item = MediaItemRequest.asMediaItem(request.getItem());
71+
72+
var item = MediaItemRequest.asMediaItem(itemRequest);
4973

5074
library.addMediaItem(item, librarian);
5175

52-
return null;
76+
var response = CreateMediaItemResponse.builder().item(getItemById(item.getId()).getBody()).build();
77+
78+
return response;
79+
}
80+
81+
@DeleteMapping("/items/{id}")
82+
public ResponseEntity<Void> deleteItem(@PathVariable("id") UUID id){
83+
84+
85+
if(getItemById(id).getBody() == null) {
86+
return ResponseEntity.notFound().build();
87+
}
88+
89+
library.removeMediaItem(id, librarian);
90+
91+
92+
return ResponseEntity.noContent().build();
93+
5394
}
5495
}

0 commit comments

Comments
 (0)