Skip to content

Commit 3cdbcbc

Browse files
authored
Update MediaItemsController.java
1 parent 3570df5 commit 3cdbcbc

File tree

1 file changed

+67
-41
lines changed

1 file changed

+67
-41
lines changed

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

Lines changed: 67 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,77 @@
1-
package com.codedifferently.lesson26.web;
1+
import {
2+
Body,
3+
Controller,
4+
Delete,
5+
Get,
6+
HttpCode,
7+
HttpStatus,
8+
Param,
9+
Post,
10+
Res,
11+
} from '@nestjs/common';
12+
import { Response } from 'express';
13+
import { Librarian, LibraryService, MediaItem } from '../library';
14+
import { CreateMediaItemRequest } from './create_media_item_request';
15+
import { CreateMediaItemResponse } from './create_media_item_response';
16+
import { GetMediaItemsResponse } from './get_media_items_response';
17+
import { fromMediaItemRequest } from './media_item_request';
18+
import { MediaItemResponse, toMediaItemResponse } from './media_item_response';
219

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;
7-
import java.io.IOException;
8-
import java.util.List;
9-
import java.util.Optional;
10-
import java.util.Set;
11-
import java.util.UUID;
20+
@Controller()
21+
export class MediaItemsController {
22+
private readonly librarian: Librarian;
1223

13-
import org.springframework.http.ResponseEntity;
14-
import org.springframework.web.bind.annotation.CrossOrigin;
15-
import org.springframework.web.bind.annotation.GetMapping;
16-
import org.springframework.web.bind.annotation.RestController;
17-
18-
@RestController
19-
@CrossOrigin
20-
public class MediaItemsController {
21-
22-
private final Library library;
23-
private final Librarian librarian;
24+
constructor(private readonly library: LibraryService) {
25+
this.librarian = library.getLibrarians()[0];
26+
}
2427

25-
public MediaItemsController(Library library) throws IOException {
26-
this.library = library;
27-
this.librarian = library.getLibrarians().stream().findFirst().orElseThrow();
28+
@Get('items')
29+
getItems(): GetMediaItemsResponse {
30+
const items: ReadonlySet<MediaItem> = this.library.search({});
31+
const responseItems: MediaItemResponse[] = [...items].map(
32+
toMediaItemResponse,
33+
);
34+
const response = { items: responseItems };
35+
return response;
2836
}
2937

30-
@GetMapping("/items")
31-
public ResponseEntity<GetMediaItemsResponse> getItems() {
32-
Set<MediaItem> items = library.search(SearchCriteria.builder().build());
33-
if (items.isEmpty()) {
34-
ResponseEntity.noContent();
38+
@Get('items/:id')
39+
getItem(
40+
@Param('id') id: string,
41+
@Res({ passthrough: true }) res: Response,
42+
): MediaItemResponse {
43+
const items = this.library.search({ id });
44+
if (items.size === 0) {
45+
res.status(HttpStatus.NOT_FOUND);
3546
}
36-
List<MediaItemResponse> responseItems = items.stream().map(MediaItemResponse::from).toList();
37-
var response = GetMediaItemsResponse.builder().items(responseItems).build();
38-
return ResponseEntity.ok(response);
47+
const item = items.values().next().value;
48+
return item ? toMediaItemResponse(item) : undefined;
3949
}
40-
@GetMapping(value = "/{id}")
41-
public ResponseEntity<MediaItemResponse> getItemById(@PathVariable("id") UUID id) {
4250

43-
System.out.println(id.toString());
51+
@Post('items')
52+
@HttpCode(HttpStatus.OK)
53+
addItem(
54+
@Body() body: CreateMediaItemRequest,
55+
@Res({ passthrough: true }) res: Response,
56+
): CreateMediaItemResponse {
57+
if (!body.item) {
58+
res.status(HttpStatus.BAD_REQUEST);
59+
return { errors: ['Missing item'] };
60+
}
61+
const item = fromMediaItemRequest(body.item);
62+
this.library.addMediaItem(item, this.librarian);
63+
return { item: toMediaItemResponse(item) };
64+
}
4465

45-
Set<MediaItem> items = library.search(SearchCriteria.builder().id(id.toString()).build());
46-
Optional<MediaItem> matchedItem =
47-
items.stream().filter(item -> item.getId().equals(id)).findFirst();
48-
System.out.println("items");
49-
return null;
66+
@Delete('items/:id')
67+
@HttpCode(HttpStatus.NO_CONTENT)
68+
deleteItem(
69+
@Param('id') id: string,
70+
@Res({ passthrough: true }) res: Response,
71+
): void {
72+
if (!this.library.hasMediaItemById(id)) {
73+
res.status(HttpStatus.NOT_FOUND);
74+
}
75+
this.library.removeMediaItemById(id, this.librarian);
76+
}
5077
}
51-
}

0 commit comments

Comments
 (0)