diff --git a/README.md b/README.md index 169d0b7..f3d928e 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ classDiagram class Quizz{ -session: Session -id : int - -utilisateur: Utilisateur + -createur: Utilisateur } class Reponse{ -id : int @@ -61,10 +61,10 @@ classDiagram -choix : ArrayList<String> } class ReponseCourte{ - -value : String } class Question{ -id : int + -enonce : String -reponse: Reponse } ``` @@ -93,7 +93,7 @@ classDiagram | Methode | URL | Description | |---------|------------------------------------------------|-----------------------------------------| | GET | `/quizz` | Retourne toute la liste du quizz | -| GET | `/quizz/{quizz_id}/questions | Retourne toutes questions du quizz | +| GET | `/quizz/{quizz_id}/questions` | Retourne toutes questions du quizz | | GET | `/quizz/{quizz_id}/add_question/{question_id}` | Ajoute une nouvuelle question au quizz | | DELETE | `/quizz/{quizz_id}/delete` | Suprrime le quizz | | PUT | `/quizz/{quizz_id}/deleteQ` | Supprime toute les questions de quizz | diff --git a/pom.xml b/pom.xml index 7fd5c35..7c20c9f 100644 --- a/pom.xml +++ b/pom.xml @@ -45,6 +45,11 @@ mysql-connector-j 8.1.0 + + jakarta.xml.bind + jakarta.xml.bind-api + 4.0.2 + diff --git a/src/main/java/fr/istic/taa/jaxrs/DAO/EntityManagerHelper.java b/src/main/java/fr/istic/taa/jaxrs/DAO/EntityManagerHelper.java index e5f7887..9f0a858 100644 --- a/src/main/java/fr/istic/taa/jaxrs/DAO/EntityManagerHelper.java +++ b/src/main/java/fr/istic/taa/jaxrs/DAO/EntityManagerHelper.java @@ -6,12 +6,19 @@ import jakarta.persistence.Persistence; public class EntityManagerHelper { - private static final EntityManagerFactory emf; + private static EntityManagerFactory emf; private static final ThreadLocal threadLocal; static { - emf = Persistence.createEntityManagerFactory("dev"); + try { + emf = Persistence.createEntityManagerFactory("dev"); + } catch (Exception e) { + emf = null; + e.printStackTrace(); + } + threadLocal = new ThreadLocal(); + } public static EntityManager getEntityManager() { 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 7fac75a..6ddb7c3 100644 --- a/src/main/java/fr/istic/taa/jaxrs/DAO/QuestionDAO.java +++ b/src/main/java/fr/istic/taa/jaxrs/DAO/QuestionDAO.java @@ -70,11 +70,11 @@ public class QuestionDAO extends AbstractJpaDao { } - public void changeQuestion(String newQuestion, Integer id) { + public void changeEnonce(String newEnonce, Integer id) { EntityTransaction t = em.getTransaction(); t.begin(); Question q = em.find(Question.class,id); - q.setQuestion(newQuestion); + q.setEnonce(newEnonce); 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 89cf260..ba9e62f 100644 --- a/src/main/java/fr/istic/taa/jaxrs/DAO/UtilisateurDAO.java +++ b/src/main/java/fr/istic/taa/jaxrs/DAO/UtilisateurDAO.java @@ -31,7 +31,7 @@ public class UtilisateurDAO extends AbstractJpaDao { Utilisateur u = em.find(Utilisateur.class, userId); //FAUT AJOUTER OWNING SIDE ( Ici u --> s) - u.getSession().add(s); + u.getSessions().add(s); //Jsp il faut birectionnelle ou pas? //s.getUtilisateurs().add(u); em.merge(u); diff --git a/src/main/java/fr/istic/taa/jaxrs/DTO/QuizzDTO.java b/src/main/java/fr/istic/taa/jaxrs/DTO/QuizzDTO.java index d7cfd39..067a12d 100644 --- a/src/main/java/fr/istic/taa/jaxrs/DTO/QuizzDTO.java +++ b/src/main/java/fr/istic/taa/jaxrs/DTO/QuizzDTO.java @@ -8,7 +8,7 @@ import java.util.List; @XmlRootElement public class QuizzDTO { private int id; - private Integer sessionId; + private List sessionsId; private Integer utilisateurId; private List questionsId; } diff --git a/src/main/java/fr/istic/taa/jaxrs/Mapper/QuestionMapper.java b/src/main/java/fr/istic/taa/jaxrs/Mapper/QuestionMapper.java index 8ed7e57..02c715c 100644 --- a/src/main/java/fr/istic/taa/jaxrs/Mapper/QuestionMapper.java +++ b/src/main/java/fr/istic/taa/jaxrs/Mapper/QuestionMapper.java @@ -7,7 +7,6 @@ import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.factory.Mappers; -import java.util.ArrayList; import java.util.List; @Mapper diff --git a/src/main/java/fr/istic/taa/jaxrs/Mapper/QuizzMapper.java b/src/main/java/fr/istic/taa/jaxrs/Mapper/QuizzMapper.java index 8ac65da..794ee25 100644 --- a/src/main/java/fr/istic/taa/jaxrs/Mapper/QuizzMapper.java +++ b/src/main/java/fr/istic/taa/jaxrs/Mapper/QuizzMapper.java @@ -2,6 +2,7 @@ package fr.istic.taa.jaxrs.Mapper; import fr.istic.taa.jaxrs.DTO.QuizzDTO; import fr.istic.taa.jaxrs.metier.Question; +import fr.istic.taa.jaxrs.metier.Session; import fr.istic.taa.jaxrs.metier.Quizz; import org.mapstruct.Mapper; import org.mapstruct.Mapping; @@ -16,8 +17,8 @@ public interface QuizzMapper { //https://www.baeldung.com/mapstruct-map-source-object-target-list //https://mapstruct.org/ - @Mapping(target="sessionId", source="session.id") - @Mapping(target="utilisateurId", source = "utilisateur.id") + @Mapping(target="sessionsId", expression="java(function_mapS(quizz.getSessions()))") + @Mapping(target="utilisateurId", source = "createur.id") @Mapping(target="questionsId",expression="java(function_mapQ(quizz.getQuestions()))") QuizzDTO toDTO(Quizz quizz); Quizz toEntity(QuizzDTO quizzDTO); @@ -31,4 +32,12 @@ public interface QuizzMapper { } return list; } + + default List function_mapS(List sessionList){ + List list=new ArrayList(); + for(Session session : sessionList){ + list.add(session.getId()); + } + return list; + } } diff --git a/src/main/java/fr/istic/taa/jaxrs/metier/Question.java b/src/main/java/fr/istic/taa/jaxrs/metier/Question.java index 700a233..c86e257 100644 --- a/src/main/java/fr/istic/taa/jaxrs/metier/Question.java +++ b/src/main/java/fr/istic/taa/jaxrs/metier/Question.java @@ -17,7 +17,7 @@ public class Question implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; - private String question; + private String enonce; @OneToOne(cascade = CascadeType.ALL) @JoinColumn(name ="bonne_reponse", referencedColumnName = "id") diff --git a/src/main/java/fr/istic/taa/jaxrs/metier/Quizz.java b/src/main/java/fr/istic/taa/jaxrs/metier/Quizz.java index 754306c..f6c2bbd 100644 --- a/src/main/java/fr/istic/taa/jaxrs/metier/Quizz.java +++ b/src/main/java/fr/istic/taa/jaxrs/metier/Quizz.java @@ -20,12 +20,12 @@ public class Quizz implements Serializable { @GeneratedValue private int id; - @ManyToOne - private Session session; + @ManyToMany + private List sessions; @ManyToOne @JoinColumn(name="id_utilisateur") - private Utilisateur utilisateur; + private Utilisateur createur; @OneToMany(mappedBy = "quizz") private List questions=new ArrayList(); diff --git a/src/main/java/fr/istic/taa/jaxrs/metier/Session.java b/src/main/java/fr/istic/taa/jaxrs/metier/Session.java index 19846ef..5a94fc6 100644 --- a/src/main/java/fr/istic/taa/jaxrs/metier/Session.java +++ b/src/main/java/fr/istic/taa/jaxrs/metier/Session.java @@ -23,10 +23,10 @@ public class Session implements Serializable { @Column(unique=true) private int codePIN; - @OneToMany(mappedBy="session", fetch = FetchType.EAGER) + @ManyToMany(mappedBy="sessions", fetch = FetchType.EAGER) private List quizzs = new ArrayList<>(); - @ManyToMany(mappedBy = "session", fetch = FetchType.EAGER) + @ManyToMany(mappedBy = "sessions", fetch = FetchType.EAGER) private List utilisateurs = new ArrayList<>(); private String theme; } \ No newline at end of file diff --git a/src/main/java/fr/istic/taa/jaxrs/metier/Utilisateur.java b/src/main/java/fr/istic/taa/jaxrs/metier/Utilisateur.java index dc9e8dd..6b0e3e8 100644 --- a/src/main/java/fr/istic/taa/jaxrs/metier/Utilisateur.java +++ b/src/main/java/fr/istic/taa/jaxrs/metier/Utilisateur.java @@ -28,8 +28,8 @@ public class Utilisateur implements Serializable { joinColumns = @JoinColumn(name="utilisateur_id"), inverseJoinColumns = @JoinColumn(name = "session_id") ) - private List session= new ArrayList<>();; + private List sessions= new ArrayList<>();; - @OneToMany(mappedBy = "utilisateur") + @OneToMany(mappedBy = "createur") private List quizzs; } \ No newline at end of file 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 04a356f..15c28a5 100644 --- a/src/main/java/fr/istic/taa/jaxrs/rest/QuestionResource.java +++ b/src/main/java/fr/istic/taa/jaxrs/rest/QuestionResource.java @@ -77,8 +77,8 @@ public class QuestionResource { 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(); + questionDAO.changeEnonce(newQuestion, id); + return Response.status(Response.Status.CREATED).entity("Enonce de la question mis à jour : " + newQuestion).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 488c766..56ba0da 100644 --- a/src/main/java/fr/istic/taa/jaxrs/rest/QuizzResource.java +++ b/src/main/java/fr/istic/taa/jaxrs/rest/QuizzResource.java @@ -1,5 +1,7 @@ package fr.istic.taa.jaxrs.rest; +import java.util.List; + import fr.istic.taa.jaxrs.DAO.QuestionDAO; import fr.istic.taa.jaxrs.DAO.QuizzDAO; import fr.istic.taa.jaxrs.DTO.QuestionDTO; @@ -14,11 +16,15 @@ import io.swagger.v3.oas.annotations.media.ArraySchema; 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.*; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DELETE; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.PUT; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; import jakarta.ws.rs.core.Response; -import java.util.List; - @Path("quizz") @Consumes({"application/json", "application/xml"}) @Produces({"application/json", "application/xml"}) @@ -27,6 +33,21 @@ public class QuizzResource { public final QuizzDAO quizzDAO = new QuizzDAO(); public final QuestionDAO questionDAO = new QuestionDAO(); + + @GET + @Operation(summary = "List all quizz", + tags = {"Quizz"}, + description = "List all quizz.", + responses = { + @ApiResponse(description = "List of all quizz", content = @Content( + array = @ArraySchema(schema = @Schema(implementation = Question.class)))) + } + ) + public List listQuizz() { + List quizz = quizzDAO.findAll(); + return mapper.toDTOs(quizz); + } + @GET @Path("/{quizz_id}") @Operation(summary = "Get a quizz by ID", diff --git a/src/main/java/fr/istic/taa/jaxrs/rest/UtilisateurResource.java b/src/main/java/fr/istic/taa/jaxrs/rest/UtilisateurResource.java index e577707..b3e8067 100644 --- a/src/main/java/fr/istic/taa/jaxrs/rest/UtilisateurResource.java +++ b/src/main/java/fr/istic/taa/jaxrs/rest/UtilisateurResource.java @@ -147,7 +147,7 @@ public class UtilisateurResource { return Response.status(Response.Status.NOT_FOUND).build(); } //If user already joined - if (utilisateur.getSession().contains(existingSession)) { + if (utilisateur.getSessions().contains(existingSession)) { return Response.status(Response.Status.CONFLICT).build(); } utilisateurDAO.addToSession(user_id, session_id); @@ -178,7 +178,7 @@ public class UtilisateurResource { if (utilisateur == null) { return Response.status(Response.Status.NOT_FOUND).build(); } - List sess = utilisateur.getSession(); + List sess = utilisateur.getSessions(); List dtos = SessionMapper.INSTANCE.toDTOs(sess); return Response.status(Response.Status.OK).entity(dtos).build(); }