diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..4c22ef0
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+/target/
+/data/
\ No newline at end of file
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 7053d0c..2e91642 100644
--- a/src/main/java/fr/istic/taa/jaxrs/DAO/QuestionDAO.java
+++ b/src/main/java/fr/istic/taa/jaxrs/DAO/QuestionDAO.java
@@ -89,13 +89,13 @@ public class QuestionDAO extends AbstractJpaDao {
}
}
- public void changeQuestion(String newQuestion, Integer id) {
+ public void changeEnonce(String newEnonce, Integer id) {
EntityTransaction t = em.getTransaction();
try {
if (!t.isActive()) t.begin();
Question q = em.find(Question.class, id);
if (q != null) {
- 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 e704984..e884467 100644
--- a/src/main/java/fr/istic/taa/jaxrs/DAO/UtilisateurDAO.java
+++ b/src/main/java/fr/istic/taa/jaxrs/DAO/UtilisateurDAO.java
@@ -26,19 +26,15 @@ public class UtilisateurDAO extends AbstractJpaDao {
if (!t.isActive()) {
t.begin();
}
-
Session s = em.find(Session.class, sessionId);
Utilisateur u = em.find(Utilisateur.class, userId);
-
if (s == null || u == null) {
throw new IllegalArgumentException("User or session not found");
}
-
if (!u.getSession().contains(s)) {
- u.getSession().add(s);
+ u.getSessions().add(s);
em.merge(u);
}
-
t.commit();
} catch (Exception e) {
if (t.isActive()) t.rollback();
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();
}