From 72ecb82a464bdcc297a3f008e7a2a04b5aef2e25 Mon Sep 17 00:00:00 2001 From: Vu Tuan Minh Date: Tue, 30 Sep 2025 23:19:48 +0200 Subject: [PATCH] Tested methods Utilisateur /register /login / /{id} --- .../java/fr/istic/taa/jaxrs/DAO/QuizzDAO.java | 2 - .../fr/istic/taa/jaxrs/DAO/SessionDAO.java | 2 - .../istic/taa/jaxrs/DAO/UtilisateurDAO.java | 2 - .../istic/taa/jaxrs/DTO/UtilisateurDTO.java | 1 + .../taa/jaxrs/Mapper/QuestionMapper.java | 12 ++ .../istic/taa/jaxrs/Mapper/QuizzMapper.java | 12 ++ .../istic/taa/jaxrs/Mapper/ReponseMapper.java | 12 ++ .../istic/taa/jaxrs/Mapper/SessionMapper.java | 13 ++ .../taa/jaxrs/Mapper/UtilisateurMapper.java | 16 +++ .../java/fr/istic/taa/jaxrs/RestServer.java | 6 +- .../fr/istic/taa/jaxrs/TestApplication.java | 10 +- .../taa/jaxrs/rest/QuestionResource.java | 4 + .../istic/taa/jaxrs/rest/QuizzResource.java | 4 + .../istic/taa/jaxrs/rest/ReponseResource.java | 4 + .../istic/taa/jaxrs/rest/SessionResource.java | 4 + .../taa/jaxrs/rest/UtilisateurResource.java | 121 ++++++++++++++++++ 16 files changed, 210 insertions(+), 15 deletions(-) create mode 100644 src/main/java/fr/istic/taa/jaxrs/Mapper/QuestionMapper.java create mode 100644 src/main/java/fr/istic/taa/jaxrs/Mapper/QuizzMapper.java create mode 100644 src/main/java/fr/istic/taa/jaxrs/Mapper/ReponseMapper.java create mode 100644 src/main/java/fr/istic/taa/jaxrs/Mapper/SessionMapper.java create mode 100644 src/main/java/fr/istic/taa/jaxrs/Mapper/UtilisateurMapper.java create mode 100644 src/main/java/fr/istic/taa/jaxrs/rest/QuestionResource.java create mode 100644 src/main/java/fr/istic/taa/jaxrs/rest/QuizzResource.java create mode 100644 src/main/java/fr/istic/taa/jaxrs/rest/ReponseResource.java create mode 100644 src/main/java/fr/istic/taa/jaxrs/rest/SessionResource.java create mode 100644 src/main/java/fr/istic/taa/jaxrs/rest/UtilisateurResource.java diff --git a/src/main/java/fr/istic/taa/jaxrs/DAO/QuizzDAO.java b/src/main/java/fr/istic/taa/jaxrs/DAO/QuizzDAO.java index 6380b69..ca09dd6 100644 --- a/src/main/java/fr/istic/taa/jaxrs/DAO/QuizzDAO.java +++ b/src/main/java/fr/istic/taa/jaxrs/DAO/QuizzDAO.java @@ -11,8 +11,6 @@ public class QuizzDAO extends AbstractJpaDao { public void deleteAllQuiz(){ EntityTransaction et= em.getTransaction(); - et.begin(); em.createQuery("delete from Quizz").executeUpdate(); - et.commit(); } } diff --git a/src/main/java/fr/istic/taa/jaxrs/DAO/SessionDAO.java b/src/main/java/fr/istic/taa/jaxrs/DAO/SessionDAO.java index 038c491..0b29fec 100644 --- a/src/main/java/fr/istic/taa/jaxrs/DAO/SessionDAO.java +++ b/src/main/java/fr/istic/taa/jaxrs/DAO/SessionDAO.java @@ -15,11 +15,9 @@ public class SessionDAO extends AbstractJpaDao { public List findByTheme(String theme){ EntityTransaction t=em.getTransaction(); - t.begin(); Query query=em.createQuery("select s from Session s where s.theme=:theme"); query.setParameter("theme",theme); List sessions=query.getResultList(); - t.commit(); if(sessions.size()>0){ return sessions; }else{ diff --git a/src/main/java/fr/istic/taa/jaxrs/DAO/UtilisateurDAO.java b/src/main/java/fr/istic/taa/jaxrs/DAO/UtilisateurDAO.java index 86006f1..f9319a7 100644 --- a/src/main/java/fr/istic/taa/jaxrs/DAO/UtilisateurDAO.java +++ b/src/main/java/fr/istic/taa/jaxrs/DAO/UtilisateurDAO.java @@ -13,11 +13,9 @@ public class UtilisateurDAO extends AbstractJpaDao { public Utilisateur findByEmail(String email){ EntityTransaction t=em.getTransaction(); - t.begin(); Query query=em.createQuery("select u from Utilisateur u where u.email=:email"); query.setParameter("email",email); Utilisateur u=(Utilisateur)query.getSingleResult(); - t.commit(); return u; } diff --git a/src/main/java/fr/istic/taa/jaxrs/DTO/UtilisateurDTO.java b/src/main/java/fr/istic/taa/jaxrs/DTO/UtilisateurDTO.java index 6e0ba04..e3ce5e9 100644 --- a/src/main/java/fr/istic/taa/jaxrs/DTO/UtilisateurDTO.java +++ b/src/main/java/fr/istic/taa/jaxrs/DTO/UtilisateurDTO.java @@ -10,4 +10,5 @@ public class UtilisateurDTO { private int id; private String name; private String email; + private String password; } diff --git a/src/main/java/fr/istic/taa/jaxrs/Mapper/QuestionMapper.java b/src/main/java/fr/istic/taa/jaxrs/Mapper/QuestionMapper.java new file mode 100644 index 0000000..1911583 --- /dev/null +++ b/src/main/java/fr/istic/taa/jaxrs/Mapper/QuestionMapper.java @@ -0,0 +1,12 @@ +package fr.istic.taa.jaxrs.Mapper; + +import fr.istic.taa.jaxrs.DTO.QuestionDTO; +import fr.istic.taa.jaxrs.metier.Question; +import org.mapstruct.factory.Mappers; + +public interface QuestionMapper { + QuestionMapper INSTANCE = Mappers.getMapper( QuestionMapper.class ); + + QuestionDTO toDTO(Question question); + Question toEntity(QuestionDTO questionDTO); +} diff --git a/src/main/java/fr/istic/taa/jaxrs/Mapper/QuizzMapper.java b/src/main/java/fr/istic/taa/jaxrs/Mapper/QuizzMapper.java new file mode 100644 index 0000000..83e60fc --- /dev/null +++ b/src/main/java/fr/istic/taa/jaxrs/Mapper/QuizzMapper.java @@ -0,0 +1,12 @@ +package fr.istic.taa.jaxrs.Mapper; + +import fr.istic.taa.jaxrs.DTO.QuizzDTO; +import fr.istic.taa.jaxrs.metier.Quizz; +import org.mapstruct.factory.Mappers; + +public interface QuizzMapper { + QuizzMapper INSTANCE = Mappers.getMapper( QuizzMapper.class ); + + QuizzDTO toDTO(Quizz quizz); + Quizz toEntity(QuizzDTO quizzDTO); +} diff --git a/src/main/java/fr/istic/taa/jaxrs/Mapper/ReponseMapper.java b/src/main/java/fr/istic/taa/jaxrs/Mapper/ReponseMapper.java new file mode 100644 index 0000000..4df65de --- /dev/null +++ b/src/main/java/fr/istic/taa/jaxrs/Mapper/ReponseMapper.java @@ -0,0 +1,12 @@ +package fr.istic.taa.jaxrs.Mapper; + +import fr.istic.taa.jaxrs.DTO.ReponseDTO; +import fr.istic.taa.jaxrs.metier.Reponse; +import org.mapstruct.factory.Mappers; + +public interface ReponseMapper { + ReponseMapper INSTANCE = Mappers.getMapper( ReponseMapper.class ); + + Reponse toEntity(ReponseDTO reponseDTO); + ReponseDTO toDTO(Reponse reponse); +} diff --git a/src/main/java/fr/istic/taa/jaxrs/Mapper/SessionMapper.java b/src/main/java/fr/istic/taa/jaxrs/Mapper/SessionMapper.java new file mode 100644 index 0000000..8d3bcd5 --- /dev/null +++ b/src/main/java/fr/istic/taa/jaxrs/Mapper/SessionMapper.java @@ -0,0 +1,13 @@ +package fr.istic.taa.jaxrs.Mapper; + +import fr.istic.taa.jaxrs.DTO.SessionDTO; +import fr.istic.taa.jaxrs.metier.Session; +import fr.istic.taa.jaxrs.metier.Utilisateur; +import org.mapstruct.factory.Mappers; + +public interface SessionMapper { + SessionMapper INSTANCE = Mappers.getMapper( SessionMapper.class ); + + SessionDTO toDTO(Utilisateur utilisateur); + Session toEntity(SessionDTO sessionDTO); +} diff --git a/src/main/java/fr/istic/taa/jaxrs/Mapper/UtilisateurMapper.java b/src/main/java/fr/istic/taa/jaxrs/Mapper/UtilisateurMapper.java new file mode 100644 index 0000000..bf9345e --- /dev/null +++ b/src/main/java/fr/istic/taa/jaxrs/Mapper/UtilisateurMapper.java @@ -0,0 +1,16 @@ +package fr.istic.taa.jaxrs.Mapper; + +import fr.istic.taa.jaxrs.DTO.UtilisateurDTO; +import fr.istic.taa.jaxrs.metier.Utilisateur; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +@Mapper +public interface UtilisateurMapper { + UtilisateurMapper INSTANCE = Mappers.getMapper(UtilisateurMapper.class); + + UtilisateurDTO toDTO(Utilisateur utilisateur); + Utilisateur toEntity(UtilisateurDTO dto); +} diff --git a/src/main/java/fr/istic/taa/jaxrs/RestServer.java b/src/main/java/fr/istic/taa/jaxrs/RestServer.java index d2eeaeb..21d4d2e 100644 --- a/src/main/java/fr/istic/taa/jaxrs/RestServer.java +++ b/src/main/java/fr/istic/taa/jaxrs/RestServer.java @@ -13,14 +13,10 @@ public class RestServer { private static final Logger logger = Logger.getLogger(RestServer.class.getName()); - public static void main( String[] args ) { - + public static void main(String[] args) { UndertowJaxrsServer ut = new UndertowJaxrsServer(); - TestApplication ta = new TestApplication(); - ut.deploy(ta); - ut.start( Undertow.builder() .addHttpListener(8080, "localhost") diff --git a/src/main/java/fr/istic/taa/jaxrs/TestApplication.java b/src/main/java/fr/istic/taa/jaxrs/TestApplication.java index c479dad..c5efe1d 100644 --- a/src/main/java/fr/istic/taa/jaxrs/TestApplication.java +++ b/src/main/java/fr/istic/taa/jaxrs/TestApplication.java @@ -19,7 +19,7 @@ package fr.istic.taa.jaxrs; import java.util.HashSet; import java.util.Set; -import fr.istic.taa.jaxrs.rest.PetResource; +import fr.istic.taa.jaxrs.rest.*; import io.swagger.v3.jaxrs2.integration.resources.OpenApiResource; import jakarta.ws.rs.ApplicationPath; import jakarta.ws.rs.core.Application; @@ -35,9 +35,11 @@ public class TestApplication extends Application { clazzes.add(OpenApiResource.class); clazzes.add(PetResource.class); -// clazzes.add(AcceptHeaderOpenApiResource.class); - - + clazzes.add(QuestionResource.class); + clazzes.add(QuizzResource.class); + clazzes.add(ReponseResource.class); + clazzes.add(UtilisateurResource.class); + clazzes.add(SessionResource.class); return clazzes; } diff --git a/src/main/java/fr/istic/taa/jaxrs/rest/QuestionResource.java b/src/main/java/fr/istic/taa/jaxrs/rest/QuestionResource.java new file mode 100644 index 0000000..1e2e64a --- /dev/null +++ b/src/main/java/fr/istic/taa/jaxrs/rest/QuestionResource.java @@ -0,0 +1,4 @@ +package fr.istic.taa.jaxrs.rest; + +public class QuestionResource { +} diff --git a/src/main/java/fr/istic/taa/jaxrs/rest/QuizzResource.java b/src/main/java/fr/istic/taa/jaxrs/rest/QuizzResource.java new file mode 100644 index 0000000..94e61d2 --- /dev/null +++ b/src/main/java/fr/istic/taa/jaxrs/rest/QuizzResource.java @@ -0,0 +1,4 @@ +package fr.istic.taa.jaxrs.rest; + +public class QuizzResource { +} diff --git a/src/main/java/fr/istic/taa/jaxrs/rest/ReponseResource.java b/src/main/java/fr/istic/taa/jaxrs/rest/ReponseResource.java new file mode 100644 index 0000000..9fc9ebf --- /dev/null +++ b/src/main/java/fr/istic/taa/jaxrs/rest/ReponseResource.java @@ -0,0 +1,4 @@ +package fr.istic.taa.jaxrs.rest; + +public class ReponseResource { +} diff --git a/src/main/java/fr/istic/taa/jaxrs/rest/SessionResource.java b/src/main/java/fr/istic/taa/jaxrs/rest/SessionResource.java new file mode 100644 index 0000000..92c1bf9 --- /dev/null +++ b/src/main/java/fr/istic/taa/jaxrs/rest/SessionResource.java @@ -0,0 +1,4 @@ +package fr.istic.taa.jaxrs.rest; + +public class SessionResource { +} diff --git a/src/main/java/fr/istic/taa/jaxrs/rest/UtilisateurResource.java b/src/main/java/fr/istic/taa/jaxrs/rest/UtilisateurResource.java new file mode 100644 index 0000000..224c658 --- /dev/null +++ b/src/main/java/fr/istic/taa/jaxrs/rest/UtilisateurResource.java @@ -0,0 +1,121 @@ +package fr.istic.taa.jaxrs.rest; + +import fr.istic.taa.jaxrs.DAO.SessionDAO; +import fr.istic.taa.jaxrs.DAO.UtilisateurDAO; +import fr.istic.taa.jaxrs.DTO.SessionDTO; +import fr.istic.taa.jaxrs.DTO.UtilisateurDTO; +import fr.istic.taa.jaxrs.Mapper.UtilisateurMapper; +import fr.istic.taa.jaxrs.metier.Quizz; +import fr.istic.taa.jaxrs.metier.Reponse; +import fr.istic.taa.jaxrs.metier.Session; +import fr.istic.taa.jaxrs.metier.Utilisateur; +import jakarta.ws.rs.*; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; +import org.mapstruct.factory.Mappers; + +import java.util.Collections; +import java.util.List; + +@Path("utilisateur") +@Consumes(MediaType.APPLICATION_JSON) +@Produces(MediaType.APPLICATION_JSON) +public class UtilisateurResource { + private final UtilisateurDAO utilisateurDAO = new UtilisateurDAO(); + private final UtilisateurMapper mapper = Mappers.getMapper(UtilisateurMapper.class); + + @POST + public Response createUtilisateur(UtilisateurDTO dto) { + Utilisateur utilisateur = mapper.toEntity(dto); + utilisateurDAO.create(utilisateur); + + UtilisateurDTO result = mapper.toDTO(utilisateur); + return Response.status(Response.Status.CREATED).entity(result).build(); + + } + + @POST + @Path("/register") + public Response registerUtilisateur(UtilisateurDTO dto) { + String email_verification = dto.getEmail(); + Utilisateur existing = utilisateurDAO.findByEmail(email_verification); + + //VERIFACTION S'IL EXISTE DANS BDD + if (existing != null) { + return Response.status(Response.Status.CONFLICT).entity("Email est déjà registré").build(); + } + + Utilisateur utilisateur = mapper.toEntity(dto); + utilisateurDAO.create(utilisateur); + + return Response.status(Response.Status.CREATED).entity("Registration succès").build(); + } + + @POST + @Path("/login") + public Response loginUtilisateur(UtilisateurDTO dto) { + Utilisateur utilisateur = utilisateurDAO.findByEmail(dto.getEmail()); + + if (utilisateur == null) { + return Response.status(Response.Status.NOT_FOUND).entity("Email n'existe pas").build(); + } else if (!utilisateur.getPassword().equals(dto.getPassword())) { + return Response.status(Response.Status.UNAUTHORIZED).entity("Mauvais mdp").build(); + } + UtilisateurDTO result = mapper.toDTO(utilisateur); + + return Response.status(Response.Status.OK).entity(result).build(); + } + + @GET + @Path("/{id}") + public Response getUtilisateur(@PathParam("id") Integer id) { + Utilisateur utilisateur = utilisateurDAO.findById(id); + if (utilisateur == null) { + return Response.status(Response.Status.NOT_FOUND).build(); + } + UtilisateurDTO result = mapper.toDTO(utilisateur); + return Response.ok(result).build(); + } + + @GET + public List listUtilisateur() { + List utilisateurs = utilisateurDAO.findAll(); + return utilisateurs; + } + + @PUT + @Path("/{user_id}/session/{session_id}") + public Response addSession(@PathParam("user_id") Integer user_id, @PathParam("session_id") Integer session_id) { + SessionDAO sessionDAO = new SessionDAO(); + + Session existingSession = sessionDAO.findById(session_id); + Utilisateur utilisateur = utilisateurDAO.findById(user_id); + + if (existingSession == null || utilisateur == null) { + return Response.status(Response.Status.NOT_FOUND).build(); + } + //If user already joined + if (utilisateur.getSession().contains(existingSession)) { + return Response.status(Response.Status.CONFLICT).build(); + } + utilisateur.getSession().add(existingSession); + utilisateurDAO.update(utilisateur); + + // We update it so have to return new DTO + UtilisateurMapper mapper = Mappers.getMapper(UtilisateurMapper.class); + UtilisateurDTO dto = mapper.toDTO(utilisateur); + + return Response.status(Response.Status.OK).entity(dto).build(); + } + + @GET + @Path("{user_id}/session") + public List listSession(@PathParam("user_id") Integer user_id) { + Utilisateur utilisateur = utilisateurDAO.findById(user_id); + if (utilisateur == null) { + return Collections.emptyList(); + } + return utilisateur.getSession(); + } + +}