Skip to content

Commit

Permalink
feat: добавил получение всех книг, проверку существования вида
Browse files Browse the repository at this point in the history
  • Loading branch information
svifty7 committed Jan 3, 2025
1 parent 4a1edff commit 124a5d7
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 10 deletions.
31 changes: 21 additions & 10 deletions src/main/java/club/ttg/dnd5/controller/book/BookController.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
import java.util.List;

@RestController
@RequestMapping("/api/v2/")
@RequestMapping("/api/v2/books")
@RequiredArgsConstructor
@Tag(name = "Книги", description = "Контроллер для управления книгами и их поиском")
public class BookController {
Expand All @@ -25,28 +25,39 @@ public class BookController {
* @param sourceBookDTO данные новой книги
* @return созданная книга
*/
@PostMapping("/book")
@PostMapping("/create")
@Operation(summary = "Создать книгу", description = "Позволяет создать новую книгу.")
public ResponseEntity<SourceBookDTO> createBook(@RequestBody SourceBookDTO sourceBookDTO) {
SourceBookDTO createdBook = bookService.createBook(sourceBookDTO);
return ResponseEntity.status(HttpStatus.CREATED).body(createdBook);
}

/**
* Создание новой книги.
*
* @return список книг
*/
@PostMapping("/search")
@Operation(summary = "Создать книгу", description = "Позволяет создать новую книгу.")
public ResponseEntity<List<SourceBookDTO>> createBook() {
return ResponseEntity.ok().body(bookService.getBooks());
}

/**
* Поиск книг по типу.
*
* @param typeName имя типа книги
* @return список книг соответствующего типа
*/
@GetMapping("/book/search/type")
@GetMapping("/search/type")
@Operation(summary = "Получить книги по типу", description = "Возвращает список книг определённого типа.")
public ResponseEntity<List<SourceBookDTO>> getBooksByType(
@Parameter(description = "Имя типа книги для поиска", example = "Базовые") @RequestParam String typeName) {
List<SourceBookDTO> books = bookService.getBooksByType(typeName);
return ResponseEntity.ok(books);
}

@GetMapping("/books/by-book-tag-type")
@GetMapping("/search/by-book-tag-type")
@Operation(summary = "Получить книги по типу тега", description = "Возвращает книги, связанные с тегами типа TAG_BOOK")
public ResponseEntity<List<SourceBookDTO>> getBooksByBookTagType() {
List<SourceBookDTO> books = bookService.getBooksByBookTagType();
Expand All @@ -56,14 +67,14 @@ public ResponseEntity<List<SourceBookDTO>> getBooksByBookTagType() {
/**
* Получение книги по акрониму источника.
*
* @param sourceAcronym акроним источника книги
* @param acronym акроним источника книги
* @return данные книги или 404, если книга не найдена
*/
@GetMapping("/book/acronym")
@GetMapping("/{acronym}")
@Operation(summary = "Получить книгу по акрониму источника", description = "Возвращает книгу по указанному акрониму источника.")
public ResponseEntity<SourceBookDTO> getBookBySourceAcronym(
@Parameter(description = "Акроним источника книги", example = "PHB") @RequestParam String sourceAcronym) {
return bookService.getBookBySourceAcronym(sourceAcronym)
@Parameter(description = "Акроним источника книги", example = "PHB") @PathVariable String acronym) {
return bookService.getBookBySourceAcronym(acronym)
.map(ResponseEntity::ok)
.orElseGet(() -> ResponseEntity.notFound().build());
}
Expand All @@ -86,11 +97,11 @@ public ResponseEntity<List<String>> getAllBookTypes() {
* @param tagName имя тега
* @return список книг с указанным тегом
*/
@GetMapping("/book/search/tag")
@GetMapping("/search/by-tag")
@Operation(summary = "Получить книги по тегу", description = "Возвращает список книг, связанных с указанным тегом.")
public ResponseEntity<List<SourceBookDTO>> getBooksByTag(
@Parameter(description = "Имя тега для поиска", example = "Официальные") @RequestParam String tagName) {
List<SourceBookDTO> books = bookService.getBooksByTag(tagName);
return ResponseEntity.ok(books);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,22 @@ public SpeciesDto getSpeciesByUrl(@PathVariable String url) {
return speciesService.findById(url);
}

@Operation(summary = "Проверить вид по URL", description = "Проверка вида по его уникальному URL.")
@ApiResponses(value = {
@ApiResponse(responseCode = "204", description = "Вид успешно получен"),
@ApiResponse(responseCode = "409", description = "Вид не найден")
})
@RequestMapping(path = "/{url}", method = RequestMethod.HEAD)
public ResponseEntity<?> isSpecieExist(@PathVariable String url) {
Boolean exist = speciesService.isExist(url);

if (exist.equals(Boolean.TRUE)) {
return ResponseEntity.status(HttpStatus.CONFLICT).build();
}

return ResponseEntity.noContent().build();
}

@GetMapping("/subspecies")
@Operation(summary = "Получить подвиды по URL родительского вида",
description = "Возвращает список подвидов, связанных с указанным родительским видом по его URL.")
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/club/ttg/dnd5/service/book/BookService.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,10 @@ public SourceBookDTO createBook(SourceBookDTO sourceBookDTO) {
return convertingEntityToSourceDTO(savedBook);
}

public List<SourceBookDTO> getBooks() {
return bookRepository.findAll().stream().map(this::convertingEntityToSourceDTO).collect(Collectors.toList());
}

// Получение книги по её sourceAcronym
public Optional<SourceBookDTO> getBookBySourceAcronym(String sourceAcronym) {
return bookRepository.findBySourceAcronym(sourceAcronym).map(this::convertingEntityToSourceDTO);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,10 @@ public SpeciesDto findById(String url) {
.orElseThrow(() -> new EntityNotFoundException(url));
}

public Boolean isExist(String url) {
return speciesRepository.existsById(url);
}

public List<SpeciesDto> getAllSpecies() {
return speciesRepository.findAll()
.stream()
Expand Down

0 comments on commit 124a5d7

Please sign in to comment.