From 528ea75fb3666c71ae845aca4faa7fffb8f95533 Mon Sep 17 00:00:00 2001 From: "arthur.valin" Date: Thu, 9 Mar 2023 13:50:49 +0100 Subject: [PATCH 1/2] Adding User DTO's --- Sources/API/Quarkus/pom.xml | 1 + .../main/java/org/acme/Api/DTO/UserDTO.java | 25 +++++++++++++++++ .../java/org/acme/Api/DTO/UserStatsDTO.java | 28 +++++++++++++++++++ .../acme/Api/controllers/UserController.java | 7 +++-- .../acme/Hibernates/entities/GameEntity.java | 16 ++--------- .../acme/Hibernates/entities/StatEntity.java | 5 ---- .../Hibernates/entities/UserStatsEntity.java | 6 ++-- .../src/main/resources/application.properties | 16 +++++------ 8 files changed, 71 insertions(+), 33 deletions(-) create mode 100644 Sources/API/Quarkus/src/main/java/org/acme/Api/DTO/UserDTO.java create mode 100644 Sources/API/Quarkus/src/main/java/org/acme/Api/DTO/UserStatsDTO.java delete mode 100644 Sources/API/Quarkus/src/main/java/org/acme/Hibernates/entities/StatEntity.java diff --git a/Sources/API/Quarkus/pom.xml b/Sources/API/Quarkus/pom.xml index 79087f1..8c5d08e 100644 --- a/Sources/API/Quarkus/pom.xml +++ b/Sources/API/Quarkus/pom.xml @@ -8,6 +8,7 @@ 3.10.1 11 + true UTF-8 UTF-8 quarkus-bom diff --git a/Sources/API/Quarkus/src/main/java/org/acme/Api/DTO/UserDTO.java b/Sources/API/Quarkus/src/main/java/org/acme/Api/DTO/UserDTO.java new file mode 100644 index 0000000..0c125e3 --- /dev/null +++ b/Sources/API/Quarkus/src/main/java/org/acme/Api/DTO/UserDTO.java @@ -0,0 +1,25 @@ +package org.acme.Api.DTO; + +import io.quarkus.hibernate.reactive.panache.common.ProjectedFieldName; +import io.quarkus.runtime.annotations.RegisterForReflection; +import org.acme.Hibernates.entities.UserStatsEntity; + +@RegisterForReflection +public class UserDTO { + public Long id; + public String name; + public UserStatsDTO stats; + + public UserDTO(Long id, String name, + @ProjectedFieldName("stats.nbVictories") Long nbVictories, + @ProjectedFieldName("stats.nbGames") Long nbGames, + @ProjectedFieldName("stats.highscore") Long highscore, + @ProjectedFieldName("stats.nbStrikes") Long nbStrikes, + @ProjectedFieldName("stats.nbSpares") Long nbSpares, + @ProjectedFieldName("stats.avgScore") Double avgScore, + @ProjectedFieldName("stats.avgPinsPerRound") Double avgPinsPerRound) { + this.id = id; + this.name = name; + this.stats = new UserStatsDTO(nbVictories, nbGames, highscore, nbStrikes, nbSpares, avgScore, avgPinsPerRound); + } +} diff --git a/Sources/API/Quarkus/src/main/java/org/acme/Api/DTO/UserStatsDTO.java b/Sources/API/Quarkus/src/main/java/org/acme/Api/DTO/UserStatsDTO.java new file mode 100644 index 0000000..80f3759 --- /dev/null +++ b/Sources/API/Quarkus/src/main/java/org/acme/Api/DTO/UserStatsDTO.java @@ -0,0 +1,28 @@ +package org.acme.Api.DTO; + +import io.quarkus.runtime.annotations.RegisterForReflection; +import org.acme.Hibernates.entities.UserStatsEntity; +import org.hibernate.annotations.ColumnDefault; +@RegisterForReflection +public class UserStatsDTO { + public Long nbVictories; + public Long nbGames; + public Long highscore; + public Long nbStrikes; + public Long nbSpares; + public Double avgScore; + public Double avgPinsPerRound; + + public UserStatsDTO(Long nbVictories, Long nbGames, Long highscore, Long nbStrikes, Long nbSpares, Double avgScore, Double avgPinsPerRound) { + this.nbVictories = nbVictories; + this.nbGames = nbGames; + this.highscore = highscore; + this.nbStrikes = nbStrikes; + this.nbSpares = nbSpares; + this.avgScore = avgScore; + this.avgPinsPerRound = avgPinsPerRound; + } + + + +} diff --git a/Sources/API/Quarkus/src/main/java/org/acme/Api/controllers/UserController.java b/Sources/API/Quarkus/src/main/java/org/acme/Api/controllers/UserController.java index a046491..f01fdcf 100644 --- a/Sources/API/Quarkus/src/main/java/org/acme/Api/controllers/UserController.java +++ b/Sources/API/Quarkus/src/main/java/org/acme/Api/controllers/UserController.java @@ -20,6 +20,8 @@ import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; +import io.quarkus.hibernate.reactive.panache.PanacheQuery; +import org.acme.Api.DTO.UserDTO; import org.acme.Api.service.UserService; import org.acme.Hibernates.entities.UserEntity; import org.jboss.logging.Logger; @@ -40,10 +42,9 @@ public class UserController { @GET @Produces(MediaType.APPLICATION_JSON) - public Uni> getUsers() { + public Uni> getUsers() { LOGGER.info("Getting all users and ordering it by name"); - Uni> allUsers = service.listAll(Sort.by("name")); - return allUsers; + return service.findAll().project(UserDTO.class).list(); } // @GET diff --git a/Sources/API/Quarkus/src/main/java/org/acme/Hibernates/entities/GameEntity.java b/Sources/API/Quarkus/src/main/java/org/acme/Hibernates/entities/GameEntity.java index fb0f6dc..8ab5385 100644 --- a/Sources/API/Quarkus/src/main/java/org/acme/Hibernates/entities/GameEntity.java +++ b/Sources/API/Quarkus/src/main/java/org/acme/Hibernates/entities/GameEntity.java @@ -4,22 +4,10 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.UUID; -<<<<<<< HEAD -import javax.persistence.Entity; -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.OneToMany; - -@Entity -======= import javax.persistence.*; @Entity @Table(name="games") ->>>>>>> bcd6335175194e1c12cc113060a02e202da0af79 public class GameEntity { @Id @@ -98,7 +86,7 @@ public class GameEntity { return this.isFinished; } - @OneToMany(mappedBy = "game", cascade = CascadeType.ALL, orphanRemoval = true) - public List rounds = new ArrayList<>(); +// @OneToMany(mappedBy = "game", cascade = CascadeType.ALL, orphanRemoval = true) +// public List rounds = new ArrayList<>(); } diff --git a/Sources/API/Quarkus/src/main/java/org/acme/Hibernates/entities/StatEntity.java b/Sources/API/Quarkus/src/main/java/org/acme/Hibernates/entities/StatEntity.java deleted file mode 100644 index 43aa7c7..0000000 --- a/Sources/API/Quarkus/src/main/java/org/acme/Hibernates/entities/StatEntity.java +++ /dev/null @@ -1,5 +0,0 @@ -package org.acme.Hibernates.entities; - -public class StatEntity { - -} diff --git a/Sources/API/Quarkus/src/main/java/org/acme/Hibernates/entities/UserStatsEntity.java b/Sources/API/Quarkus/src/main/java/org/acme/Hibernates/entities/UserStatsEntity.java index 3fbddd6..fa6bc1a 100644 --- a/Sources/API/Quarkus/src/main/java/org/acme/Hibernates/entities/UserStatsEntity.java +++ b/Sources/API/Quarkus/src/main/java/org/acme/Hibernates/entities/UserStatsEntity.java @@ -12,7 +12,7 @@ public class UserStatsEntity { @Id private Long id; @MapsId - @OneToOne(fetch = FetchType.LAZY) + @OneToOne @JoinColumn (name = "user_id", referencedColumnName = "id", insertable = false, updatable = false) private UserEntity user; @ColumnDefault("0") @@ -26,9 +26,9 @@ public class UserStatsEntity { @ColumnDefault("0") private Long nbSpares = 0L; @ColumnDefault("-1") - private double avgScore = -1; + private Double avgScore = 0d; @ColumnDefault("-1") - private double avgPinsPerRound = -1; + private Double avgPinsPerRound = 0d; public UserStatsEntity() { } diff --git a/Sources/API/Quarkus/src/main/resources/application.properties b/Sources/API/Quarkus/src/main/resources/application.properties index 2c6dc9a..0a048b2 100644 --- a/Sources/API/Quarkus/src/main/resources/application.properties +++ b/Sources/API/Quarkus/src/main/resources/application.properties @@ -1,18 +1,18 @@ # achanger quarkus.datasource.db-kind = postgresql -quarkus.datasource.username = postgres -quarkus.datasource.password = achanger -quarkus.datasource.reactive.url = vertx-reactive:postgresql://localhost:5432/postgres +quarkus.datasource.username = bowlin_team +quarkus.datasource.password = bowlin +quarkus.datasource.reactive.url = vertx-reactive:postgresql://localhost:5432/bowlin quarkus.hibernate-orm.log.sql=true quarkus.hibernate-orm.sql-load-script=import.sql -# #HTTPS Configuration + #HTTPS Configuration -# quarkus.http.ssl.certificate.key-files=https/privkey.pem -# quarkus.http.ssl.certificate.files=https/cert.pem + quarkus.http.ssl.certificate.key-files=https/privkey.pem + quarkus.http.ssl.certificate.files=https/cert.pem -# # Disable the HTTP server -# quarkus.http.insecure-requests=redirect + # Disable the HTTP server + quarkus.http.insecure-requests=redirect # # OIDC Configuration # quarkus.oidc.auth-server-url=http://localhost:8080/realms/BowlinAuth From 1bfdc4eed0d4f7e66eeb731e3c796d2e6f6854f6 Mon Sep 17 00:00:00 2001 From: "arthur.valin" Date: Thu, 9 Mar 2023 14:15:27 +0100 Subject: [PATCH 2/2] Adding User DTO's --- .../main/java/org/acme/Api/DTO/UserTinyDTO.java | 14 ++++++++++++++ .../org/acme/Api/controllers/UserController.java | 7 ++++--- .../java/org/acme/Api/service/UserService.java | 5 +++++ 3 files changed, 23 insertions(+), 3 deletions(-) create mode 100644 Sources/API/Quarkus/src/main/java/org/acme/Api/DTO/UserTinyDTO.java diff --git a/Sources/API/Quarkus/src/main/java/org/acme/Api/DTO/UserTinyDTO.java b/Sources/API/Quarkus/src/main/java/org/acme/Api/DTO/UserTinyDTO.java new file mode 100644 index 0000000..9d31d69 --- /dev/null +++ b/Sources/API/Quarkus/src/main/java/org/acme/Api/DTO/UserTinyDTO.java @@ -0,0 +1,14 @@ +package org.acme.Api.DTO; + +import io.quarkus.hibernate.reactive.panache.common.ProjectedFieldName; +import io.quarkus.runtime.annotations.RegisterForReflection; + +@RegisterForReflection +public class UserTinyDTO { + public Long id; + public String name; + public UserTinyDTO(Long id, String name) { + this.id = id; + this.name = name; + } +} diff --git a/Sources/API/Quarkus/src/main/java/org/acme/Api/controllers/UserController.java b/Sources/API/Quarkus/src/main/java/org/acme/Api/controllers/UserController.java index f01fdcf..16eccfc 100644 --- a/Sources/API/Quarkus/src/main/java/org/acme/Api/controllers/UserController.java +++ b/Sources/API/Quarkus/src/main/java/org/acme/Api/controllers/UserController.java @@ -22,6 +22,7 @@ import javax.ws.rs.core.Response.Status; import io.quarkus.hibernate.reactive.panache.PanacheQuery; import org.acme.Api.DTO.UserDTO; +import org.acme.Api.DTO.UserTinyDTO; import org.acme.Api.service.UserService; import org.acme.Hibernates.entities.UserEntity; import org.jboss.logging.Logger; @@ -42,9 +43,9 @@ public class UserController { @GET @Produces(MediaType.APPLICATION_JSON) - public Uni> getUsers() { + public Uni> getUsers() { LOGGER.info("Getting all users and ordering it by name"); - return service.findAll().project(UserDTO.class).list(); + return service.findAll().project(UserTinyDTO.class).list(); } // @GET @@ -65,7 +66,7 @@ public class UserController { @Path("/{id}") public Uni getUserById(@PathParam("id") Long id) { LOGGER.info("Get user with id : " + id); - return service.findById(id) + return service.findByBowlinId(id) .onItem() .transform( entity -> entity == null ? Response.status(Status.NOT_FOUND) : Response.ok(entity).status(200)) diff --git a/Sources/API/Quarkus/src/main/java/org/acme/Api/service/UserService.java b/Sources/API/Quarkus/src/main/java/org/acme/Api/service/UserService.java index e6ddd53..55fee69 100644 --- a/Sources/API/Quarkus/src/main/java/org/acme/Api/service/UserService.java +++ b/Sources/API/Quarkus/src/main/java/org/acme/Api/service/UserService.java @@ -4,6 +4,7 @@ import java.util.List; import javax.enterprise.context.ApplicationScoped; +import org.acme.Api.DTO.UserDTO; import org.acme.Hibernates.entities.UserEntity; import io.quarkus.hibernate.reactive.panache.PanacheRepository; @@ -19,6 +20,10 @@ public class UserService implements PanacheRepository { return list("name", name); } + public Uni> findByBowlinId(Long id) { + return find("id", id).project(UserDTO.class).list(); + } + // public Uni deleteUser() { // return delete("name", "Stef"); // }