Skip to content

Commit db7465b

Browse files
author
Meiko-S22
committed
feat: implements MediaItemsController
1 parent ad5d3b8 commit db7465b

File tree

4 files changed

+62
-5
lines changed

4 files changed

+62
-5
lines changed

lesson_26/api/java/api_app/build.gradle.kts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ plugins {
55
id("com.diffplug.spotless") version "6.25.0"
66
id("org.springframework.boot") version "3.4.0"
77
id("com.adarshr.test-logger") version "4.0.0"
8-
id("io.freefair.lombok") version "8.6"
8+
// id("io.freefair.lombok") version "8.6"
99
}
1010

1111
apply(plugin = "io.spring.dependency-management")
@@ -39,6 +39,10 @@ dependencies {
3939
implementation("org.apache.commons:commons-csv:1.10.0")
4040
implementation("org.xerial:sqlite-jdbc:3.36.0")
4141
implementation("org.hibernate.orm:hibernate-community-dialects:6.2.7.Final")
42+
compileOnly("org.projectlombok:lombok:1.18.38")
43+
annotationProcessor("org.projectlombok:lombok:1.18.38")
44+
testCompileOnly("org.projectlombok:lombok:1.18.38")
45+
testAnnotationProcessor("org.projectlombok:lombok:1.18.38")
4246
}
4347

4448
application {

lesson_26/api/java/api_app/src/main/java/com/codedifferently/lesson26/library/Library.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import java.util.Collections;
77
import java.util.HashMap;
88
import java.util.HashSet;
9+
import java.util.List;
910
import java.util.Map;
1011
import java.util.Set;
1112
import java.util.UUID;
@@ -297,4 +298,12 @@ public String toString() {
297298
+ guestsById
298299
+ '}';
299300
}
301+
302+
public List<MediaItem> getAllItems() {
303+
throw new UnsupportedOperationException("Not supported yet.");
304+
}
305+
306+
public Object getAnItem(UUID id) {
307+
throw new UnsupportedOperationException("Not supported yet.");
308+
}
300309
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,8 @@
1414
public class CreateMediaItemRequest {
1515
@NotNull(message = "item is required") @Valid
1616
private MediaItemRequest item;
17+
18+
MediaItemRequest getItem() {
19+
throw new UnsupportedOperationException("Not supported yet.");
20+
}
1721
}

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

Lines changed: 44 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;
95
import java.util.Set;
6+
import java.util.UUID;
7+
108
import org.springframework.http.ResponseEntity;
119
import org.springframework.web.bind.annotation.CrossOrigin;
10+
import org.springframework.web.bind.annotation.DeleteMapping;
1211
import org.springframework.web.bind.annotation.GetMapping;
12+
import org.springframework.web.bind.annotation.PathVariable;
13+
import org.springframework.web.bind.annotation.PostMapping;
14+
import org.springframework.web.bind.annotation.RequestBody;
1315
import org.springframework.web.bind.annotation.RestController;
1416

17+
import com.codedifferently.lesson26.library.Librarian;
18+
import com.codedifferently.lesson26.library.Library;
19+
import com.codedifferently.lesson26.library.MediaItem;
20+
import com.codedifferently.lesson26.library.search.SearchCriteria;
21+
22+
import jakarta.validation.Valid;
23+
1524
@RestController
1625
@CrossOrigin
1726
public class MediaItemsController {
@@ -31,4 +40,35 @@ public ResponseEntity<GetMediaItemsResponse> getItems() {
3140
var response = GetMediaItemsResponse.builder().items(responseItems).build();
3241
return ResponseEntity.ok(response);
3342
}
43+
44+
@PostMapping("/items")
45+
public CreateMediaItemResponse postItem(@Valid @RequestBody CreateMediaItemRequest request) {
46+
MediaItem item = MediaItemRequest.asMediaItem(request.getItem());
47+
library.addMediaItem(item, librarian);
48+
return CreateMediaItemResponse.builder().item(MediaItemResponse.from(item)).build();
49+
}
50+
51+
@GetMapping("/items/{id}")
52+
public ResponseEntity<MediaItemResponse> getItemById(@PathVariable UUID id) {
53+
SearchCriteria criteria = SearchCriteria.builder().id(id.toString()).build();
54+
Set<MediaItem> items = library.search(criteria);
55+
56+
if (!items.isEmpty()) {
57+
MediaItem item = items.iterator().next();
58+
MediaItemResponse response = MediaItemResponse.from(item);
59+
return ResponseEntity.ok(response);
60+
} else {
61+
return ResponseEntity.notFound().build();
62+
}
63+
}
64+
65+
@DeleteMapping("/items/{id}")
66+
public ResponseEntity<Void> deleteMediaItem(@PathVariable("id") UUID id) {
67+
try {
68+
library.removeMediaItem(id, librarian);
69+
return ResponseEntity.noContent().build();
70+
} catch (Exception e) {
71+
return ResponseEntity.notFound().build();
72+
}
73+
}
3474
}

0 commit comments

Comments
 (0)