Skip to content

Instantly share code, notes, and snippets.

@danirod
Created July 24, 2023 18:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save danirod/f4ed1c8370b7a7524a9315dcb9ac7177 to your computer and use it in GitHub Desktop.
Save danirod/f4ed1c8370b7a7524a9315dcb9ac7177 to your computer and use it in GitHub Desktop.
Código del capítulo de Quarkus donde hablo de servicios. Las notas del episodio están en https://www.makigas.es/series/acceso-a-datos-con-quarkus/modificar-y-borrar-registros y el vídeo se puede ver en https://www.youtube.com/watch?v=KLeavUAk_H0
package es.danirod.quarkus.bookshelf;
import jakarta.persistence.Entity;
import io.quarkus.hibernate.orm.panache.PanacheEntity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;
import java.time.LocalDate;
import java.util.Objects;
@Entity
public class Book {
@Id
@GeneratedValue
private Long id;
private String title;
private String description;
private int numPages;
private LocalDate pubDate;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public int getNumPages() {
return numPages;
}
public void setNumPages(int numPages) {
this.numPages = numPages;
}
public LocalDate getPubDate() {
return pubDate;
}
public void setPubDate(LocalDate pubDate) {
this.pubDate = pubDate;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Book book)) return false;
return id == book.id && numPages == book.numPages && Objects.equals(title, book.title) && Objects.equals(description, book.description) && Objects.equals(pubDate, book.pubDate);
}
@Override
public int hashCode() {
return Objects.hash(id, title, description, numPages, pubDate);
}
@Override
public String toString() {
return "Book{" +
"title='" + title + '\'' +
", description='" + description + '\'' +
", numPages=" + numPages +
", pubDate=" + pubDate +
", id=" + id +
'}';
}
}
package es.danirod.quarkus.bookshelf;
import io.quarkus.hibernate.orm.panache.PanacheRepository;
import jakarta.enterprise.context.ApplicationScoped;
@ApplicationScoped
public class BookRepository implements PanacheRepository<Book> {
}
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;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment