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.Singleton;
import org.acme.Api.service.*;
import org.acme.api.service.*;
@Singleton
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.Map;
import org.acme.Hibernates.entities.GameEntity;
import org.acme.Hibernates.entities.ParticipeEntity;
import org.eclipse.microprofile.openapi.annotations.media.Schema;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.quarkus.hibernate.reactive.panache.common.ProjectedFieldName;
import io.quarkus.runtime.annotations.RegisterForReflection;
import io.smallrye.mutiny.Uni;
import io.quarkus.runtime.annotations.RegisterForReflection;
import java.time.LocalDate;
import java.util.List;
// @RegisterForReflection
// @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)
public GameDto(Long id,
Uni<List<ParticipeDto>> players,
LocalDate time,
Long ownerGame,
UserTinyDTO winner,
Uni<List<RoundDto>> rounds) {
Uni<List<ParticipeDto>> players,
LocalDate time,
Long ownerGame,
UserTinyDTO winner,
Uni<List<RoundDto>> rounds) {
this.players = players;
this.date = time;
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 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;

@ -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 org.acme.Hibernates.entities.UserStatsEntity;
import org.eclipse.microprofile.openapi.annotations.media.Schema;
@RegisterForReflection
@Schema(description = "A DTO for transferring user details")
public class UserDTO {
public Long id;
public String name;
public String image;

@ -1,9 +1,7 @@
package org.acme.Api.DTO;
package org.acme.api.dto;
import io.quarkus.runtime.annotations.RegisterForReflection;
import org.acme.Hibernates.entities.UserStatsEntity;
import org.eclipse.microprofile.openapi.annotations.media.Schema;
import org.hibernate.annotations.ColumnDefault;
@RegisterForReflection
@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.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.Singleton;
import org.acme.Api.BowlDbContext;
import org.acme.api.BowlDbContext;
@Singleton
public class DbManager {

@ -1,13 +1,12 @@
package org.acme.Api.Manager;
package org.acme.api.manager;
import java.util.List;
import java.util.stream.Collectors;
import javax.enterprise.context.ApplicationScoped;
import javax.ws.rs.NotFoundException;
import org.acme.Api.DTO.GameDto;
import org.acme.Api.Mappeur.GameMappeur;
import org.acme.api.dto.GameDto;
import org.acme.api.mappeur.GameMappeur;
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.ZoneId;
@ -7,10 +7,10 @@ import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
import org.acme.Api.DTO.ParticipeDto;
import org.acme.Api.DTO.RoundDto;
import org.acme.Hibernates.entities.ParticipeEntity;
import org.acme.Hibernates.entities.RoundEntity;
import org.acme.api.dto.ParticipeDto;
import org.acme.api.dto.RoundDto;
import org.acme.hibernates.entities.ParticipeEntity;
import org.acme.hibernates.entities.RoundEntity;
import io.smallrye.mutiny.Uni;

@ -1,17 +1,8 @@
package org.acme.Api.Mappeur;
package org.acme.api.mappeur;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.ArrayList;
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;
import org.acme.api.BowlDbContext;
import org.acme.api.dto.GameDto;
import org.acme.hibernates.entities.GameEntity;
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.RoundDto;
import org.acme.Hibernates.entities.ParticipeEntity;
import org.acme.api.dto.ParticipeDto;
import org.acme.hibernates.entities.ParticipeEntity;
public class ParticipeMappeur {
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 org.acme.Api.DTO.RoundDto;
import org.acme.Hibernates.entities.RoundEntity;
import org.acme.Hibernates.entities.ThrowEntity;
import org.acme.api.dto.RoundDto;
import org.acme.hibernates.entities.RoundEntity;
import org.acme.hibernates.entities.ThrowEntity;
public class RoundMappeur {

@ -1,4 +1,4 @@
package org.acme.Api.Mappeur;
package org.acme.api.mappeur;
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.UserTinyDTO;
import org.acme.Hibernates.entities.UserEntity;
import org.acme.api.dto.UserDTO;
import org.acme.api.dto.UserTinyDTO;
import org.acme.hibernates.entities.UserEntity;
public class UserMappeur {
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.util.List;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import javax.transaction.Transactional;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.NotFoundException;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
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.Status;
import org.acme.Api.DTO.GameDto;
import org.acme.Api.DTO.UserTinyDTO;
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.acme.api.dto.GameDto;
import org.acme.api.manager.DbManager;
import org.jboss.logging.Logger;
import io.quarkus.hibernate.reactive.panache.common.runtime.ReactiveTransactional;
import io.quarkus.panache.common.Sort;
import io.smallrye.mutiny.Uni;
@ApplicationScoped

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

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

@ -1,11 +1,11 @@
package org.acme.Api.service;
package org.acme.api.service;
import java.util.List;
import javax.enterprise.context.ApplicationScoped;
import org.acme.Api.DTO.ParticipeDto;
import org.acme.Hibernates.entities.ParticipeEntity;
import org.acme.api.dto.ParticipeDto;
import org.acme.hibernates.entities.ParticipeEntity;
import io.quarkus.hibernate.reactive.panache.PanacheQuery;
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 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.smallrye.mutiny.Uni;

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

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

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

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

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

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

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

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

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

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

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

@ -1,9 +1,9 @@
INSERT INTO
Users (name, password, image, mail)
VALUES
('David', 'password123','','david.d_almeida@etu.uca.fr'),
('Emre', 'password2','','emre.kartal@etu.uca.fr'),
('Arthur', 'password3','','arthur.valin@etu.uca.fr');
('david', 'password123','','david.d_almeida@etu.uca.fr'),
('emre', 'password2','','emre.kartal@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 participe (idGame, position, guestname, totalpoints, iduser) VALUES (1, 1, 'Alice', 0, 1);

Loading…
Cancel
Save