package es.danirod.quarkus.bookshelf; import jakarta.inject.Inject; import jakarta.transaction.Transactional; import jakarta.ws.rs.*; import jakarta.ws.rs.core.Response; import java.util.List; import java.util.NoSuchElementException; @Path("/books") public class BookResource { private BookRepository booksRepository; @Inject public BookResource(BookRepository booksRepository) { this.booksRepository = booksRepository; } @GET public List<Book> listBooks() { return booksRepository.listAll(); } @POST @Transactional public Book insertBook(Book givenBook) { booksRepository.persist(givenBook); return givenBook; } @GET @Path("{id}") public Response retrieveBook(@PathParam("id") Long id) { Book book = booksRepository.findById(id); if (book != null) { return Response.ok(book).build(); } return Response.status(404).entity("Not found").build(); } @DELETE @Path("{id}") @Transactional public void deleteBook(@PathParam("id") Long id) { booksRepository.deleteById(id); } @PUT @Path("{id}") @Transactional public Book updateBook(@PathParam("id") Long id, Book bookData) { Book existingBook = booksRepository.findById(id); if (existingBook == null) { throw new NoSuchElementException("Este libro no existe"); } existingBook.setTitle(bookData.getTitle()); existingBook.setDescription(bookData.getDescription()); existingBook.setPubDate(bookData.getPubDate()); existingBook.setNumPages(bookData.getNumPages()); // El libro que persistimos es el que nos entregó el ORM. booksRepository.persist(existingBook); return existingBook; } }