Created
July 24, 2023 18:28
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 + | |
'}'; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package es.danirod.quarkus.bookshelf; | |
import io.quarkus.hibernate.orm.panache.PanacheRepository; | |
import jakarta.enterprise.context.ApplicationScoped; | |
@ApplicationScoped | |
public class BookRepository implements PanacheRepository<Book> { | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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