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 io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; 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(); } Reponse result = question.getReponse(); 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}/deletReponses/") 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(); } }