ADD MAPPING
This commit is contained in:
Vu Tuan Minh
2025-10-01 13:32:45 +02:00
parent f4c990c0fb
commit bd301f169d
17 changed files with 110 additions and 49 deletions

View File

@@ -21,6 +21,7 @@
|---------|-----------------|------------------------------------|
| GET | `/session` | Retourne toute la liste du session |
| GET | `/session/{id}` | Retourne la session par id |
|GET |
## Auteurs

View File

@@ -1,7 +1,6 @@
package fr.istic.taa.jaxrs.DAO;
import jakarta.persistence.EntityTransaction;
import jakarta.persistence.Query;
import fr.istic.taa.jaxrs.metier.Session;
import fr.istic.taa.jaxrs.metier.Utilisateur;

View File

@@ -1,13 +1,15 @@
package fr.istic.taa.jaxrs.DTO;
import lombok.AllArgsConstructor;
import jakarta.xml.bind.annotation.XmlRootElement;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@XmlRootElement
public class QuestionDTO {
private int id;
private String question;
private String reponse;
private List<String> reponses_string;
}

View File

@@ -1,12 +1,14 @@
package fr.istic.taa.jaxrs.DTO;
import lombok.AllArgsConstructor;
import jakarta.xml.bind.annotation.XmlRootElement;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@XmlRootElement
public class QuizzDTO {
private int id;
private Integer sessionId;
private Integer utilisateurId;
private List<Integer> questionsId;
}

View File

@@ -1,10 +0,0 @@
package fr.istic.taa.jaxrs.DTO;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
public class ReponseDTO {
}

View File

@@ -1,10 +1,17 @@
package fr.istic.taa.jaxrs.DTO;
import lombok.AllArgsConstructor;
import jakarta.xml.bind.annotation.XmlRootElement;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@XmlRootElement
public class SessionDTO {
private String theme;
private int codePIN;
private int id;
private List<Integer> quizzsId;
private List<Integer> utilisateursId;
}

View File

@@ -1,11 +1,10 @@
package fr.istic.taa.jaxrs.DTO;
import lombok.AllArgsConstructor;
import jakarta.xml.bind.annotation.XmlRootElement;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@XmlRootElement
public class UtilisateurDTO {
private int id;
private String name;

View File

@@ -2,11 +2,25 @@ package fr.istic.taa.jaxrs.Mapper;
import fr.istic.taa.jaxrs.DTO.QuestionDTO;
import fr.istic.taa.jaxrs.metier.Question;
import fr.istic.taa.jaxrs.metier.Reponse;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
import java.util.ArrayList;
import java.util.List;
@Mapper
public interface QuestionMapper {
QuestionMapper INSTANCE = Mappers.getMapper( QuestionMapper.class );
@Mapping(target = "reponses_string", expression = "java(question_ReponseString(question.getReponse()))")
QuestionDTO toDTO(Question question);
Question toEntity(QuestionDTO questionDTO);
default List<String> question_ReponseString(Reponse reponse){
return reponse.getReponses();
}
}

View File

@@ -1,12 +1,32 @@
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.Quizz;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
import java.util.ArrayList;
import java.util.List;
@Mapper
public interface QuizzMapper {
QuizzMapper INSTANCE = Mappers.getMapper( QuizzMapper.class );
//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="questionsId",expression="java(function_mapQ(quizz.getQuestions()))")
QuizzDTO toDTO(Quizz quizz);
Quizz toEntity(QuizzDTO quizzDTO);
default List<Integer> function_mapQ(List<Question> questionList){
List<Integer> list=new ArrayList<Integer>();
for(Question question : questionList){
list.add(question.getId());
}
return list;
}
}

View File

@@ -1,12 +0,0 @@
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);
}

View File

@@ -1,13 +1,40 @@
package fr.istic.taa.jaxrs.Mapper;
import fr.istic.taa.jaxrs.DTO.SessionDTO;
import fr.istic.taa.jaxrs.metier.Quizz;
import fr.istic.taa.jaxrs.metier.Session;
import fr.istic.taa.jaxrs.metier.Utilisateur;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
import java.util.ArrayList;
import java.util.List;
@Mapper
public interface SessionMapper {
SessionMapper INSTANCE = Mappers.getMapper( SessionMapper.class );
SessionDTO toDTO(Session utilisateur);
@Mapping(target="utilisateursId",expression="java(function_mapU(session.getUtilisateurs()))")
@Mapping(target="quizzsId",expression="java(function_mapQ(session.getQuizzs()))")
SessionDTO toDTO(Session session);
Session toEntity(SessionDTO sessionDTO);
//https://www.baeldung.com/mapstruct-map-source-object-target-list
default List<Integer> function_mapU(List<Utilisateur> utilisateurList) {
List<Integer> result = new ArrayList<>();
for (Utilisateur utilisateur : utilisateurList) {
result.add(utilisateur.getId());
}
return result;
}
default List<Integer> function_mapQ(List<Quizz> quizzList) {
List<Integer> result = new ArrayList<>();
for (Quizz quizz : quizzList) {
result.add(quizz.getId());
}
return result;
}
}

View File

@@ -27,8 +27,4 @@ public class Quizz implements Serializable {
@OneToMany(mappedBy = "quizz")
private List<Question> questions=new ArrayList<Question>();
public void addQuestion(Question question) {
this.questions.add(question);
}
}

View File

@@ -20,6 +20,7 @@ public class Session implements Serializable {
@Column(unique=true)
private int codePIN;
@OneToMany(mappedBy="session")
private List<Quizz> quizzs = new ArrayList<>();

View File

@@ -1,4 +1,12 @@
package fr.istic.taa.jaxrs.rest;
import jakarta.ws.rs.Consumes;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;
@Path("question")
@Consumes({"application/json", "application/xml"})
@Produces({"application/json", "application/xml"})
public class QuestionResource {
}

View File

@@ -1,4 +1,12 @@
package fr.istic.taa.jaxrs.rest;
import jakarta.ws.rs.Consumes;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;
@Path("quizz")
@Consumes({"application/json", "application/xml"})
@Produces({"application/json", "application/xml"})
public class QuizzResource {
}

View File

@@ -14,11 +14,11 @@ import org.mapstruct.factory.Mappers;
import java.util.List;
@Path("session")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@Consumes({"application/json", "application/xml"})
@Produces({"application/json", "application/xml"})
public class SessionResource {
private final SessionDAO sessionDAO = new SessionDAO();
private final SessionMapper mapper = Mappers.getMapper(SessionMapper.class);
private final SessionMapper mapper = SessionMapper.INSTANCE;
@GET
public List<Session> listSession() {
@@ -34,7 +34,7 @@ public class SessionResource {
return Response.status(Response.Status.NOT_FOUND).build();
}
SessionDTO result = mapper.toDTO(session);
return Response.status(Response.Status.OK).build();
return Response.status(Response.Status.OK).entity(result).build();
}

View File

@@ -15,12 +15,11 @@ import java.util.Collections;
import java.util.List;
@Path("utilisateur")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@Consumes({"application/json", "application/xml"})
@Produces({"application/json", "application/xml"})
public class UtilisateurResource {
private final UtilisateurDAO utilisateurDAO = new UtilisateurDAO();
private final UtilisateurMapper mapper = Mappers.getMapper(UtilisateurMapper.class);
private final UtilisateurMapper mapper = UtilisateurMapper.INSTANCE;
@GET
public List<Utilisateur> listUtilisateur() {
List<Utilisateur> utilisateurs = utilisateurDAO.findAll();