Better cleanliness of the code (removal of unused dependencies and application of naming conventions) and improvement of the user controller (with addition of 2 new routes)

Quarkus_Continue
Emre KARTAL 2 years ago
parent a336610308
commit b61e33dde7

@ -1,10 +1,9 @@
package org.acme.Api; package org.acme.api;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Singleton; import javax.inject.Singleton;
import org.acme.Api.service.*; import org.acme.api.service.*;
@Singleton @Singleton
public class BowlDbContext { public class BowlDbContext {

@ -1,25 +1,17 @@
package org.acme.Api.DTO; package org.acme.api.dto;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import org.acme.Hibernates.entities.GameEntity;
import org.acme.Hibernates.entities.ParticipeEntity;
import org.eclipse.microprofile.openapi.annotations.media.Schema; import org.eclipse.microprofile.openapi.annotations.media.Schema;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import io.quarkus.hibernate.reactive.panache.common.ProjectedFieldName;
import io.quarkus.runtime.annotations.RegisterForReflection; import io.quarkus.runtime.annotations.RegisterForReflection;
import io.smallrye.mutiny.Uni; import io.smallrye.mutiny.Uni;
import io.quarkus.runtime.annotations.RegisterForReflection;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.List;
// @RegisterForReflection // @RegisterForReflection
// @Schema(description = "A DTO for transferring game details") // @Schema(description = "A DTO for transferring game details")
@ -77,11 +69,11 @@ public class GameDto {
// Constructeur avec tous les champs sauf l'ID (généré automatiquement) // Constructeur avec tous les champs sauf l'ID (généré automatiquement)
public GameDto(Long id, public GameDto(Long id,
Uni<List<ParticipeDto>> players, Uni<List<ParticipeDto>> players,
LocalDate time, LocalDate time,
Long ownerGame, Long ownerGame,
UserTinyDTO winner, UserTinyDTO winner,
Uni<List<RoundDto>> rounds) { Uni<List<RoundDto>> rounds) {
this.players = players; this.players = players;
this.date = time; this.date = time;
this.hostID = ownerGame; this.hostID = ownerGame;

@ -1,9 +1,5 @@
package org.acme.Api.DTO; package org.acme.api.dto;
import java.util.UUID;
import org.acme.Hibernates.entities.ParticipeEntity;
import org.acme.Hibernates.entities.ParticipeId;
import org.eclipse.microprofile.openapi.annotations.media.Schema; import org.eclipse.microprofile.openapi.annotations.media.Schema;
import io.quarkus.runtime.annotations.RegisterForReflection; import io.quarkus.runtime.annotations.RegisterForReflection;

@ -1,4 +1,4 @@
package org.acme.Api.DTO; package org.acme.api.dto;
import io.quarkus.runtime.annotations.RegisterForReflection; import io.quarkus.runtime.annotations.RegisterForReflection;

@ -1,13 +1,12 @@
package org.acme.Api.DTO; package org.acme.api.dto;
import io.quarkus.hibernate.reactive.panache.common.ProjectedFieldName;
import io.quarkus.runtime.annotations.RegisterForReflection; import io.quarkus.runtime.annotations.RegisterForReflection;
import org.acme.Hibernates.entities.UserStatsEntity;
import org.eclipse.microprofile.openapi.annotations.media.Schema; import org.eclipse.microprofile.openapi.annotations.media.Schema;
@RegisterForReflection @RegisterForReflection
@Schema(description = "A DTO for transferring user details") @Schema(description = "A DTO for transferring user details")
public class UserDTO { public class UserDTO {
public Long id; public Long id;
public String name; public String name;
public String image; public String image;

@ -1,9 +1,7 @@
package org.acme.Api.DTO; package org.acme.api.dto;
import io.quarkus.runtime.annotations.RegisterForReflection; import io.quarkus.runtime.annotations.RegisterForReflection;
import org.acme.Hibernates.entities.UserStatsEntity;
import org.eclipse.microprofile.openapi.annotations.media.Schema; import org.eclipse.microprofile.openapi.annotations.media.Schema;
import org.hibernate.annotations.ColumnDefault;
@RegisterForReflection @RegisterForReflection
@Schema(description = "A DTO describing the stats of a User") @Schema(description = "A DTO describing the stats of a User")

@ -1,4 +1,4 @@
package org.acme.Api.DTO; package org.acme.api.dto;
import io.quarkus.hibernate.reactive.panache.common.ProjectedFieldName; import io.quarkus.hibernate.reactive.panache.common.ProjectedFieldName;
import io.quarkus.runtime.annotations.RegisterForReflection; import io.quarkus.runtime.annotations.RegisterForReflection;

@ -1,10 +1,9 @@
package org.acme.Api.Manager; package org.acme.api.manager;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Singleton; import javax.inject.Singleton;
import org.acme.Api.BowlDbContext; import org.acme.api.BowlDbContext;
@Singleton @Singleton
public class DbManager { public class DbManager {

@ -1,13 +1,12 @@
package org.acme.Api.Manager; package org.acme.api.manager;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import javax.enterprise.context.ApplicationScoped;
import javax.ws.rs.NotFoundException; import javax.ws.rs.NotFoundException;
import org.acme.Api.DTO.GameDto; import org.acme.api.dto.GameDto;
import org.acme.Api.Mappeur.GameMappeur; import org.acme.api.mappeur.GameMappeur;
import io.smallrye.mutiny.Uni; import io.smallrye.mutiny.Uni;

@ -1,4 +1,4 @@
package org.acme.Api.Mappeur; package org.acme.api.mappeur;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.ZoneId; import java.time.ZoneId;
@ -7,10 +7,10 @@ import java.util.Date;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import org.acme.Api.DTO.ParticipeDto; import org.acme.api.dto.ParticipeDto;
import org.acme.Api.DTO.RoundDto; import org.acme.api.dto.RoundDto;
import org.acme.Hibernates.entities.ParticipeEntity; import org.acme.hibernates.entities.ParticipeEntity;
import org.acme.Hibernates.entities.RoundEntity; import org.acme.hibernates.entities.RoundEntity;
import io.smallrye.mutiny.Uni; import io.smallrye.mutiny.Uni;

@ -1,17 +1,8 @@
package org.acme.Api.Mappeur; package org.acme.api.mappeur;
import java.time.LocalDate; import org.acme.api.BowlDbContext;
import java.time.ZoneId; import org.acme.api.dto.GameDto;
import java.util.ArrayList; import org.acme.hibernates.entities.GameEntity;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.acme.Api.BowlDbContext;
import org.acme.Api.DTO.GameDto;
import org.acme.Api.DTO.UserTinyDTO;
import org.acme.Hibernates.entities.GameEntity;
public class GameMappeur { public class GameMappeur {

@ -1,8 +1,7 @@
package org.acme.Api.Mappeur; package org.acme.api.mappeur;
import org.acme.Api.DTO.ParticipeDto; import org.acme.api.dto.ParticipeDto;
import org.acme.Api.DTO.RoundDto; import org.acme.hibernates.entities.ParticipeEntity;
import org.acme.Hibernates.entities.ParticipeEntity;
public class ParticipeMappeur { public class ParticipeMappeur {
public static ParticipeDto toDto(ParticipeEntity entity) { public static ParticipeDto toDto(ParticipeEntity entity) {

@ -1,10 +1,10 @@
package org.acme.Api.Mappeur; package org.acme.api.mappeur;
import java.util.List; import java.util.List;
import org.acme.Api.DTO.RoundDto; import org.acme.api.dto.RoundDto;
import org.acme.Hibernates.entities.RoundEntity; import org.acme.hibernates.entities.RoundEntity;
import org.acme.Hibernates.entities.ThrowEntity; import org.acme.hibernates.entities.ThrowEntity;
public class RoundMappeur { public class RoundMappeur {

@ -1,4 +1,4 @@
package org.acme.Api.Mappeur; package org.acme.api.mappeur;
public class TrhowMappeur { public class TrhowMappeur {

@ -1,8 +1,8 @@
package org.acme.Api.Mappeur; package org.acme.api.mappeur;
import org.acme.Api.DTO.UserDTO; import org.acme.api.dto.UserDTO;
import org.acme.Api.DTO.UserTinyDTO; import org.acme.api.dto.UserTinyDTO;
import org.acme.Hibernates.entities.UserEntity; import org.acme.hibernates.entities.UserEntity;
public class UserMappeur { public class UserMappeur {
public static UserDTO toUserDto(UserEntity entity) { public static UserDTO toUserDto(UserEntity entity) {

@ -1,17 +1,13 @@
package org.acme.Api.controllers; package org.acme.api.controllers;
import java.net.URI; import java.net.URI;
import java.util.List; import java.util.List;
import javax.enterprise.context.ApplicationScoped; import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject; import javax.inject.Inject;
import javax.transaction.Transactional;
import javax.ws.rs.Consumes; import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET; import javax.ws.rs.GET;
import javax.ws.rs.NotFoundException;
import javax.ws.rs.POST; import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path; import javax.ws.rs.Path;
import javax.ws.rs.PathParam; import javax.ws.rs.PathParam;
import javax.ws.rs.Produces; import javax.ws.rs.Produces;
@ -20,17 +16,11 @@ import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response; import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status; import javax.ws.rs.core.Response.Status;
import org.acme.Api.DTO.GameDto; import org.acme.api.dto.GameDto;
import org.acme.Api.DTO.UserTinyDTO; import org.acme.api.manager.DbManager;
import org.acme.Api.Manager.DbManager;
import org.acme.Api.Manager.GameManager;
import org.acme.Api.service.GameRepository;
import org.acme.Hibernates.entities.GameEntity;
import org.acme.Hibernates.entities.UserEntity;
import org.jboss.logging.Logger; import org.jboss.logging.Logger;
import io.quarkus.hibernate.reactive.panache.common.runtime.ReactiveTransactional; import io.quarkus.hibernate.reactive.panache.common.runtime.ReactiveTransactional;
import io.quarkus.panache.common.Sort;
import io.smallrye.mutiny.Uni; import io.smallrye.mutiny.Uni;
@ApplicationScoped @ApplicationScoped

@ -1,15 +1,13 @@
package org.acme.Api.controllers; package org.acme.api.controllers;
import java.net.URI; import java.net.URI;
import java.util.List; import java.util.List;
import javax.enterprise.context.ApplicationScoped; import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject; import javax.inject.Inject;
import javax.transaction.Transactional;
import javax.ws.rs.Consumes; import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE; import javax.ws.rs.DELETE;
import javax.ws.rs.GET; import javax.ws.rs.GET;
import javax.ws.rs.NotFoundException;
import javax.ws.rs.POST; import javax.ws.rs.POST;
import javax.ws.rs.PUT; import javax.ws.rs.PUT;
import javax.ws.rs.Path; import javax.ws.rs.Path;
@ -20,19 +18,14 @@ import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response; import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status; import javax.ws.rs.core.Response.Status;
import io.quarkus.hibernate.reactive.panache.PanacheQuery; import org.acme.api.BowlDbContext;
import org.acme.api.dto.UserDTO;
import org.acme.Api.BowlDbContext; import org.acme.hibernates.entities.UserEntity;
import org.acme.Api.DTO.UserDTO;
import org.acme.Api.DTO.UserTinyDTO;
import org.acme.Api.service.UserRepository;
import org.acme.Hibernates.entities.UserEntity;
import org.eclipse.microprofile.openapi.annotations.Operation; import org.eclipse.microprofile.openapi.annotations.Operation;
import org.eclipse.microprofile.openapi.annotations.responses.APIResponse; import org.eclipse.microprofile.openapi.annotations.responses.APIResponse;
import org.jboss.logging.Logger; import org.jboss.logging.Logger;
import io.quarkus.hibernate.reactive.panache.common.runtime.ReactiveTransactional; import io.quarkus.hibernate.reactive.panache.common.runtime.ReactiveTransactional;
import io.quarkus.panache.common.Sort;
import io.smallrye.mutiny.Uni; import io.smallrye.mutiny.Uni;
@ApplicationScoped @ApplicationScoped
@ -61,12 +54,33 @@ public class UserController {
@Path("/{id}") @Path("/{id}")
public Uni<Response> getUserById(@PathParam("id") Long id) { public Uni<Response> getUserById(@PathParam("id") Long id) {
LOGGER.info("Get user with id : " + id); LOGGER.info("Get user with id : " + id);
return service.userRepository.findByBowlinId(id) return service.userRepository.getUserById(id)
.onItem() .map(user -> user == null ? Response.status(Status.NOT_FOUND) : Response.ok(user).status(200))
.transform( .map(Response.ResponseBuilder::build);
entity -> entity == null ? Response.status(Status.NOT_FOUND) : Response.ok(entity).status(200)) }
.onItem().transform(Response.ResponseBuilder::build);
@GET
@Operation(summary = "Get a user by name")
@APIResponse(responseCode = "200", description = "OK")
@APIResponse(responseCode = "404", description = "User not found")
@Path("/name/{name}")
public Uni<Response> getUserByName(@PathParam("name") String name) {
LOGGER.info("Get user with name : " + name);
return service.userRepository.findwithName(name)
.map(user -> user == null ? Response.status(Status.NOT_FOUND) : Response.ok(user).status(200))
.map(Response.ResponseBuilder::build);
}
@GET
@Operation(summary = "Get a user by mail")
@APIResponse(responseCode = "200", description = "OK")
@APIResponse(responseCode = "404", description = "User not found")
@Path("/mail/{mail}")
public Uni<Response> getUserByMail(@PathParam("mail") String mail) {
LOGGER.info("Get user with mail : " + mail);
return service.userRepository.findwithMail(mail)
.map(user -> user == null ? Response.status(Status.NOT_FOUND) : Response.ok(user).status(200))
.map(Response.ResponseBuilder::build);
} }
@POST @POST
@ -105,7 +119,7 @@ public class UserController {
@DELETE @DELETE
@Operation(summary = "Delete a user") @Operation(summary = "Delete a user")
@APIResponse(responseCode = "200", description = "User successfully deleted") @APIResponse(responseCode = "204")
@APIResponse(responseCode = "404", description = "User not found") @APIResponse(responseCode = "404", description = "User not found")
@Path("/{id}") @Path("/{id}")
@ReactiveTransactional @ReactiveTransactional
@ -113,7 +127,7 @@ public class UserController {
LOGGER.info("Delete user with id : " + id); LOGGER.info("Delete user with id : " + id);
return service.userRepository.deleteById(id) return service.userRepository.deleteById(id)
.onItem().transform(entity -> !entity ? Response.status(Status.NOT_FOUND).build() .onItem().transform(entity -> !entity ? Response.status(Status.NOT_FOUND).build()
: Response.ok().status(200).build()); : Response.noContent().build());
} }
@GET @GET

@ -1,13 +1,11 @@
package org.acme.Api.service; package org.acme.api.service;
import java.util.List; import java.util.List;
import javax.enterprise.context.ApplicationScoped; import javax.enterprise.context.ApplicationScoped;
import javax.ws.rs.NotFoundException;
import org.acme.Api.DTO.GameDto; import org.acme.api.dto.GameDto;
import org.acme.Api.Mappeur.GameMappeur; import org.acme.hibernates.entities.GameEntity;
import org.acme.Hibernates.entities.GameEntity;
import io.quarkus.hibernate.reactive.panache.PanacheRepository; import io.quarkus.hibernate.reactive.panache.PanacheRepository;
import io.smallrye.mutiny.Uni; import io.smallrye.mutiny.Uni;

@ -1,11 +1,11 @@
package org.acme.Api.service; package org.acme.api.service;
import java.util.List; import java.util.List;
import javax.enterprise.context.ApplicationScoped; import javax.enterprise.context.ApplicationScoped;
import org.acme.Api.DTO.ParticipeDto; import org.acme.api.dto.ParticipeDto;
import org.acme.Hibernates.entities.ParticipeEntity; import org.acme.hibernates.entities.ParticipeEntity;
import io.quarkus.hibernate.reactive.panache.PanacheQuery; import io.quarkus.hibernate.reactive.panache.PanacheQuery;
import io.quarkus.hibernate.reactive.panache.PanacheRepository; import io.quarkus.hibernate.reactive.panache.PanacheRepository;

@ -1,11 +1,10 @@
package org.acme.Api.service; package org.acme.api.service;
import java.util.List; import java.util.List;
import javax.enterprise.context.ApplicationScoped; import javax.enterprise.context.ApplicationScoped;
import org.acme.Hibernates.entities.GameEntity; import org.acme.hibernates.entities.RoundEntity;
import org.acme.Hibernates.entities.RoundEntity;
import io.quarkus.hibernate.reactive.panache.PanacheRepository; import io.quarkus.hibernate.reactive.panache.PanacheRepository;
import io.smallrye.mutiny.Uni; import io.smallrye.mutiny.Uni;

@ -1,8 +1,8 @@
package org.acme.Api.service; package org.acme.api.service;
import javax.enterprise.context.ApplicationScoped; import javax.enterprise.context.ApplicationScoped;
import org.acme.Hibernates.entities.ThrowEntity; import org.acme.hibernates.entities.ThrowEntity;
import io.quarkus.hibernate.reactive.panache.PanacheRepository; import io.quarkus.hibernate.reactive.panache.PanacheRepository;

@ -1,12 +1,9 @@
package org.acme.Api.service; package org.acme.api.service;
import java.util.List;
import javax.enterprise.context.ApplicationScoped; import javax.enterprise.context.ApplicationScoped;
import org.acme.Api.DTO.UserDTO; import org.acme.api.dto.UserDTO;
import org.acme.Api.DTO.UserTinyDTO; import org.acme.hibernates.entities.UserEntity;
import org.acme.Hibernates.entities.UserEntity;
import io.quarkus.hibernate.reactive.panache.PanacheRepository; import io.quarkus.hibernate.reactive.panache.PanacheRepository;
import io.smallrye.mutiny.Uni; import io.smallrye.mutiny.Uni;
@ -18,16 +15,16 @@ public class UserRepository implements PanacheRepository<UserEntity> {
// return UserEntity.find("name", name).firstResult(); // return UserEntity.find("name", name).firstResult();
// } // }
public Uni<List<UserEntity>> findwithName(String name) { public Uni<UserDTO> findwithName(String name) {
return list("name", name); return find("name", name.toLowerCase()).project(UserDTO.class).firstResult();
} }
public Uni<List<UserDTO>> findByBowlinId(Long id) { public Uni<UserDTO> findwithMail(String mail) {
return find("id", id).project(UserDTO.class).list(); return find("mail", mail.toLowerCase()).project(UserDTO.class).firstResult();
} }
// public Uni<Long> deleteUser() { public Uni<UserDTO> getUserById(Long id) {
// return delete("name", "Stef"); return find("id", id).project(UserDTO.class).firstResult();
// } }
} }

@ -1,4 +1,4 @@
package org.acme.Hibernates.entities; package org.acme.hibernates.entities;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;

@ -1,4 +1,4 @@
package org.acme.Hibernates.entities; package org.acme.hibernates.entities;
import java.io.Serializable; import java.io.Serializable;

@ -1,4 +1,4 @@
package org.acme.Hibernates.entities; package org.acme.hibernates.entities;
import java.io.Serializable; import java.io.Serializable;

@ -1,4 +1,4 @@
package org.acme.Hibernates.entities; package org.acme.hibernates.entities;
import java.io.Serializable; import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;

@ -1,4 +1,4 @@
package org.acme.Hibernates.entities; package org.acme.hibernates.entities;
import java.io.Serializable; import java.io.Serializable;
import java.util.Objects; import java.util.Objects;

@ -1,4 +1,4 @@
package org.acme.Hibernates.entities; package org.acme.hibernates.entities;
import javax.persistence.*; import javax.persistence.*;

@ -1,4 +1,4 @@
package org.acme.Hibernates.entities; package org.acme.hibernates.entities;
import java.io.Serializable; import java.io.Serializable;
import java.util.Objects; import java.util.Objects;

@ -1,12 +1,9 @@
package org.acme.Hibernates.entities; package org.acme.hibernates.entities;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.*; import javax.persistence.*;
@Entity @Entity
@Table(name = "Users") @Table(name = "Users", uniqueConstraints = {@UniqueConstraint(columnNames = {"name"}), @UniqueConstraint(columnNames = {"mail"})})
public class UserEntity { public class UserEntity {
@Id @Id

@ -1,4 +1,4 @@
package org.acme.Hibernates.entities; package org.acme.hibernates.entities;
import org.hibernate.annotations.ColumnDefault; import org.hibernate.annotations.ColumnDefault;

@ -1,7 +1,7 @@
quarkus.datasource.db-kind = postgresql quarkus.datasource.db-kind = postgresql
quarkus.datasource.username = postgres quarkus.datasource.username = Garderie
quarkus.datasource.password = achanger quarkus.datasource.password = mdp
quarkus.datasource.reactive.url = vertx-reactive:postgresql://localhost:5432/BowlInDB quarkus.datasource.reactive.url = vertx-reactive:postgresql://bowldev-postgresql:5432/BowlInDB
#BowlDev-postgresql #BowlDev-postgresql
quarkus.hibernate-orm.log.sql=true quarkus.hibernate-orm.log.sql=true

@ -1,9 +1,9 @@
INSERT INTO INSERT INTO
Users (name, password, image, mail) Users (name, password, image, mail)
VALUES VALUES
('David', 'password123','','david.d_almeida@etu.uca.fr'), ('david', 'password123','','david.d_almeida@etu.uca.fr'),
('Emre', 'password2','','emre.kartal@etu.uca.fr'), ('emre', 'password2','','emre.kartal@etu.uca.fr'),
('Arthur', 'password3','','arthur.valin@etu.uca.fr'); ('arthur', 'password3','','arthur.valin@etu.uca.fr');
/*INSERT INTO games (isFinished, nbPoints, time, winner, host_id) VALUES (false, 0, CURRENT_TIMESTAMP, 0, 1); /*INSERT INTO games (isFinished, nbPoints, time, winner, host_id) VALUES (false, 0, CURRENT_TIMESTAMP, 0, 1);
INSERT INTO participe (idGame, position, guestname, totalpoints, iduser) VALUES (1, 1, 'Alice', 0, 1); INSERT INTO participe (idGame, position, guestname, totalpoints, iduser) VALUES (1, 1, 'Alice', 0, 1);

Loading…
Cancel
Save