BookController.java
package com.example.restapi.controller;
import com.example.restapi.model.Book;
import com.example.restapi.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import io.swagger.v3.oas.annotations.Hidden;
import java.util.List;
import java.util.Optional;
@RestController
@RequestMapping("/api/books")
@Hidden // This will hide the entire BookController from Swagger
public class BookController {
@Autowired
private BookService bookService;
@GetMapping
public List<Book> getAllBooks() {
return bookService.getAllBooks();
}
@GetMapping("/{id}")
public ResponseEntity<Book> getBookById(@PathVariable Long id) {
Optional<Book> book = bookService.getBookById(id);
return book.map(ResponseEntity::ok).orElseGet(() -> ResponseEntity.notFound().build());
}
@PostMapping
public ResponseEntity<Book> createBook(@RequestBody Book book) {
System.out.println("***Book Title: " + book.getTitle() + ", Author: " + book.getAuthor());
try {
Book createdBook = bookService.createBook(book);
return ResponseEntity.ok(createdBook);
} catch (Exception e) {
return ResponseEntity.badRequest().build();
}
}
@PutMapping("/{id}")
public ResponseEntity<Book> updateBook(@PathVariable Long id, @RequestBody Book bookDetails) {
try {
Book updatedBook = bookService.updateBook(id, bookDetails);
return ResponseEntity.ok(updatedBook);
} catch (Exception e) {
return ResponseEntity.badRequest().build();
}
}
@DeleteMapping("/{id}")
public ResponseEntity<Void> deleteBook(@PathVariable Long id) {
Optional<Book> book = bookService.getBookById(id);
if (book.isPresent()) {
bookService.deleteBook(id);
return ResponseEntity.noContent().build();
} else {
return ResponseEntity.notFound().build();
}
}
}