diff --git a/pom.xml b/pom.xml index ee88ca1..804ed82 100644 --- a/pom.xml +++ b/pom.xml @@ -9,13 +9,15 @@ quarkus-bom io.quarkus.platform - 3.24.5 - 3.11.0 + 3.25.0 + 3.14.0 3.1.2 UTF-8 17 17 true + 1.18.38 + @@ -31,15 +33,41 @@ + + org.projectlombok lombok - 1.18.38 + ${lombok.version} + + io.quarkus quarkus-rest-jackson + + + + io.quarkus + quarkus-hibernate-validator + + + + + io.quarkus + quarkus-hibernate-orm + + + io.quarkus + quarkus-jdbc-postgresql + + + jakarta.data + jakarta.data-api + + + io.quarkus quarkus-junit5 @@ -50,6 +78,7 @@ rest-assured test + @@ -57,6 +86,20 @@ maven-compiler-plugin ${compiler-plugin.version} + + true + + + org.hibernate.orm + hibernate-processor + + + org.projectlombok + lombok + ${lombok.version} + + + maven-surefire-plugin @@ -109,7 +152,9 @@ - ${project.build.directory}/${project.build.finalName}-runner + + ${project.build.directory}/${project.build.finalName}-runner + org.jboss.logmanager.LogManager ${maven.home} @@ -121,4 +166,4 @@ - + \ No newline at end of file diff --git a/src/main/java/casa/sotu/organizajogos/api/modelo/Jogo.java b/src/main/java/casa/sotu/organizajogos/api/modelo/Jogo.java index 9c1f25a..a1a4b28 100644 --- a/src/main/java/casa/sotu/organizajogos/api/modelo/Jogo.java +++ b/src/main/java/casa/sotu/organizajogos/api/modelo/Jogo.java @@ -2,11 +2,30 @@ package casa.sotu.organizajogos.api.modelo; import java.util.UUID; -import lombok.Data; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.persistence.Id; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Getter; +import lombok.Setter; -@Data +@Getter +@Setter +@Entity public class Jogo { + + @Id private UUID id; + + @NotBlank private String nome; + + @NotNull + @Enumerated(EnumType.STRING) private Estado estado; + + @NotBlank + private String loja; } diff --git a/src/main/java/casa/sotu/organizajogos/api/persistencia/ArmarioJogo.java b/src/main/java/casa/sotu/organizajogos/api/persistencia/ArmarioJogo.java index eeca413..a09b112 100644 --- a/src/main/java/casa/sotu/organizajogos/api/persistencia/ArmarioJogo.java +++ b/src/main/java/casa/sotu/organizajogos/api/persistencia/ArmarioJogo.java @@ -1,31 +1,11 @@ package casa.sotu.organizajogos.api.persistencia; -import java.util.HashMap; -import java.util.List; -import java.util.Map; import java.util.UUID; import casa.sotu.organizajogos.api.modelo.Jogo; -import jakarta.enterprise.context.ApplicationScoped; +import jakarta.data.repository.CrudRepository; +import jakarta.data.repository.Repository; -@ApplicationScoped -public class ArmarioJogo { - private Map jogos = new HashMap<>(); - - public void criar(Jogo jogo) { - jogo.setId(UUID.randomUUID()); - jogos.put(jogo.getId(), jogo); - } - - public Jogo pegar(UUID id) { - return jogos.get(id); - } - - public void remover(UUID id) { - jogos.remove(id); - } - - public List listar() { - return List.copyOf(jogos.values()); - } +@Repository +public interface ArmarioJogo extends CrudRepository { } diff --git a/src/main/java/casa/sotu/organizajogos/api/recursos/RecursoJogo.java b/src/main/java/casa/sotu/organizajogos/api/recursos/RecursoJogo.java index 937a05e..3c889ee 100644 --- a/src/main/java/casa/sotu/organizajogos/api/recursos/RecursoJogo.java +++ b/src/main/java/casa/sotu/organizajogos/api/recursos/RecursoJogo.java @@ -5,8 +5,10 @@ import java.util.UUID; import casa.sotu.organizajogos.api.modelo.Jogo; import casa.sotu.organizajogos.api.persistencia.ArmarioJogo; +import jakarta.validation.Valid; import jakarta.ws.rs.DELETE; import jakarta.ws.rs.GET; +import jakarta.ws.rs.NotFoundException; import jakarta.ws.rs.POST; import jakarta.ws.rs.PUT; import jakarta.ws.rs.Path; @@ -14,41 +16,41 @@ import jakarta.ws.rs.PathParam; @Path("jogos") public class RecursoJogo { - + private ArmarioJogo armarioJogo; - + public RecursoJogo(ArmarioJogo armarioJogo) { this.armarioJogo = armarioJogo; - + } - + @GET public List listaJogos() { - return armarioJogo.listar(); + return armarioJogo.findAll().toList(); } - + @GET @Path("{id}") public Jogo pegaJogo(@PathParam("id") UUID id) { - return this.armarioJogo.pegar(id); + return this.armarioJogo.findById(id).orElseThrow(NotFoundException::new); } - + @POST - public void criaJogo(Jogo jogo) { - this.armarioJogo.criar(jogo); + public void criaJogo(@Valid Jogo jogo) { + jogo.setId(UUID.randomUUID()); + this.armarioJogo.insert(jogo); } - + @PUT @Path("{id}") - public void atualizaJogo(@PathParam("id") UUID id, Jogo jogo) { - Jogo atual = this.armarioJogo.pegar(id); - atual.setNome(jogo.getNome()); - atual.setEstado(jogo.getEstado()); + public void atualizaJogo(@PathParam("id") UUID id, @Valid Jogo jogo) { + jogo.setId(id); + armarioJogo.update(jogo); } @DELETE @Path("{id}") public void remove(@PathParam("id") UUID id) { - this.armarioJogo.remover(id); + this.armarioJogo.deleteById(id); } } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index dc78bc1..737ea16 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,2 +1,10 @@ # Quarkus Configuration file # key = value +quarkus.datasource.db-kind=pg +quarkus.datasource.username=postgres +quarkus.datasource.password=${POSTGRES_PASSWORD} +quarkus.datasource.jdbc.url=jdbc:postgresql://${POSTGRES_URL}/ +quarkus.hibernate-orm.schema-management.strategy=update +%dev.quarkus.hibernate-orm.schema-management.strategy=drop-and-create +%dev.quarkus.hibernate-orm.dev-ui.allow-hql=true +%dev.quarkus.datasource.dev-ui.allowed-db-host=* \ No newline at end of file