diff --git a/src/main/java/fr/istic/taa/jaxrs/DAO/QuestionDAO.java b/src/main/java/fr/istic/taa/jaxrs/DAO/QuestionDAO.java index 58db369..7fac75a 100644 --- a/src/main/java/fr/istic/taa/jaxrs/DAO/QuestionDAO.java +++ b/src/main/java/fr/istic/taa/jaxrs/DAO/QuestionDAO.java @@ -1,10 +1,82 @@ package fr.istic.taa.jaxrs.DAO; +import java.util.ArrayList; +import java.util.List; + +import fr.istic.taa.jaxrs.metier.Choix; import fr.istic.taa.jaxrs.metier.Question; +import fr.istic.taa.jaxrs.metier.Reponse; +import fr.istic.taa.jaxrs.metier.ReponseCourte; +import fr.istic.taa.jaxrs.metier.Session; +import fr.istic.taa.jaxrs.metier.Utilisateur; +import jakarta.persistence.EntityTransaction; public class QuestionDAO extends AbstractJpaDao { public QuestionDAO(){ super(); this.setClass(Question.class); } + + + public void addReponse(String reponse, int questionId){ + EntityTransaction t = em.getTransaction(); + t.begin(); + Question q = em.find(Question.class,questionId); + + q.getReponse().getReponses().add(reponse); + em.merge(q); + t.commit(); + } + + + public void deleteReponse( int questionId) { + EntityTransaction t = em.getTransaction(); + t.begin(); + Question q = em.find(Question.class,questionId); + + q.getReponse().setReponses(new ArrayList<>()); + em.merge(q); + t.commit(); + } + + + public void setReponse(Reponse rep, Integer id) { + EntityTransaction t = em.getTransaction(); + t.begin(); + Question q = em.find(Question.class,id); + q.setReponse(rep); + em.merge(q); + t.commit(); + } + + + public void setChoix(Integer id) { + setReponse(new Choix(),id); + } + + public void setReponseCourte(Integer id) { + setReponse(new ReponseCourte(),id); + } + + + public void addChoix(Integer id, String choix) { + EntityTransaction t = em.getTransaction(); + t.begin(); + Question q = em.find(Question.class,id); + + ((Choix)q.getReponse()).getChoix().add(choix); + em.merge(q); + t.commit(); + } + + + public void changeQuestion(String newQuestion, Integer id) { + EntityTransaction t = em.getTransaction(); + t.begin(); + Question q = em.find(Question.class,id); + q.setQuestion(newQuestion); + em.merge(q); + t.commit(); + } } + 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 349e7e7..89cf260 100644 --- a/src/main/java/fr/istic/taa/jaxrs/DAO/UtilisateurDAO.java +++ b/src/main/java/fr/istic/taa/jaxrs/DAO/UtilisateurDAO.java @@ -33,7 +33,7 @@ public class UtilisateurDAO extends AbstractJpaDao { //FAUT AJOUTER OWNING SIDE ( Ici u --> s) u.getSession().add(s); //Jsp il faut birectionnelle ou pas? - s.getUtilisateurs().add(u); + //s.getUtilisateurs().add(u); em.merge(u); t.commit(); } diff --git a/src/main/java/fr/istic/taa/jaxrs/rest/QuestionResource.java b/src/main/java/fr/istic/taa/jaxrs/rest/QuestionResource.java index f9cda42..1624f42 100644 --- a/src/main/java/fr/istic/taa/jaxrs/rest/QuestionResource.java +++ b/src/main/java/fr/istic/taa/jaxrs/rest/QuestionResource.java @@ -1,11 +1,129 @@ package fr.istic.taa.jaxrs.rest; +import java.util.List; + +import fr.istic.taa.jaxrs.DAO.QuestionDAO; +import fr.istic.taa.jaxrs.DTO.QuestionDTO; +import fr.istic.taa.jaxrs.Mapper.QuestionMapper; +import fr.istic.taa.jaxrs.metier.Choix; +import fr.istic.taa.jaxrs.metier.Question; +import fr.istic.taa.jaxrs.metier.Reponse; import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.PATCH; +import jakarta.ws.rs.PUT; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.DELETE; import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.Response; + @Path("question") @Consumes({"application/json", "application/xml"}) @Produces({"application/json", "application/xml"}) public class QuestionResource { + private final QuestionDAO questionDAO = new QuestionDAO(); + private final QuestionMapper mapper = QuestionMapper.INSTANCE; + + @GET + public List listQuestion(){ + List questions = questionDAO.findAll(); + return questions; + } + + @POST + @Path("/addQuestion") + public Response addQuestion(QuestionDTO dto){ + Question question = mapper.toEntity(dto); + questionDAO.create(question); + return Response.status(Response.Status.CREATED).entity("Question ajouté avec Succès : \"" + dto.getQuestion() + "\"").build(); + } + + @PUT + @Path("/{question_id}/changeQuestion/") + public Response changeQuestion(@PathParam("question_id") Integer id, String newQuestion){ + Question question = questionDAO.findById(id); + if(question == null){ + return Response.status(Response.Status.NOT_FOUND).build(); + } + questionDAO.changeQuestion(newQuestion,id); + return Response.status(Response.Status.CREATED).entity("Question mis à jour : " + newQuestion).build(); + + } + + @GET + @Path("/{question_id}/getReponse/") + public Response getReponse(@PathParam("question_id") Integer id){ + Question question = questionDAO.findById(id); + if(question == null){ + return Response.status(Response.Status.NOT_FOUND).build(); + } + QuestionDTO result = mapper.toDTO(question); + return Response.ok(result).build(); + + } + + @PUT + @Path("/{question_id}/addReponse/") + public Response addReponse(@PathParam("question_id") Integer id, String reponse){ + Question question = questionDAO.findById(id); + if(question == null){ + return Response.status(Response.Status.NOT_FOUND).build(); + } + questionDAO.addReponse(reponse,id); + return Response.status(Response.Status.CREATED).entity("Reponse correct \""+reponse+"\" ajouté à la question " + id).build(); + + } + + @DELETE + @Path("/{question_id}/deletReponse/") + public Response addReponse(@PathParam("question_id") Integer id){ + Question question = questionDAO.findById(id); + if(question == null){ + return Response.status(Response.Status.NOT_FOUND).build(); + } + questionDAO.deleteReponse(id); + return Response.status(Response.Status.CREATED).entity("Reponses supprimé de la question " + id).build(); + + } + + @PUT + @Path("/{question_id}/setReponse/choix") + public Response setChoix(@PathParam("question_id") Integer id){ + Question question = questionDAO.findById(id); + if(question == null){ + return Response.status(Response.Status.NOT_FOUND).build(); + } + questionDAO.setChoix(id); + return Response.status(Response.Status.CREATED).entity("Reponses à choix multiple mise sur la question " + id).build(); + } + + @PUT + @Path("/{question_id}/setReponse/reponseCourte") + public Response setReponseCourte(@PathParam("question_id") Integer id){ + Question question = questionDAO.findById(id); + if(question == null){ + return Response.status(Response.Status.NOT_FOUND).build(); + } + questionDAO.setReponseCourte(id); + return Response.status(Response.Status.CREATED).entity("Reponses courte mise sur la question " + id).build(); + + } + + @PUT + @Path("/{question_id}/AddChoix") + public Response addChoix(@PathParam("question_id") Integer id, String choix){ + Question question = questionDAO.findById(id); + if(question == null){ + return Response.status(Response.Status.NOT_FOUND).build(); + } + if(question.getReponse() instanceof Choix){ + return Response.status(Response.Status.EXPECTATION_FAILED).build(); + } + questionDAO.addChoix(id, choix); + return Response.status(Response.Status.CREATED).entity("Reponses courte mise sur la question " + id).build(); + + } } diff --git a/src/main/java/fr/istic/taa/jaxrs/rest/QuizzResource.java b/src/main/java/fr/istic/taa/jaxrs/rest/QuizzResource.java index ebd7263..e534f4d 100644 --- a/src/main/java/fr/istic/taa/jaxrs/rest/QuizzResource.java +++ b/src/main/java/fr/istic/taa/jaxrs/rest/QuizzResource.java @@ -24,6 +24,6 @@ public class QuizzResource { QuizzDTO dto = mapper.toDTO(quizz); return Response.status(Response.Status.OK).entity(dto).build(); } - + @ }