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` | Retourne toute la liste du session |
| GET | `/session/{id}` | Retourne la session par id | | GET | `/session/{id}` | Retourne la session par id |
|GET |
## Auteurs ## Auteurs

View File

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

View File

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

View File

@@ -1,12 +1,14 @@
package fr.istic.taa.jaxrs.DTO; package fr.istic.taa.jaxrs.DTO;
import lombok.AllArgsConstructor; import jakarta.xml.bind.annotation.XmlRootElement;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import java.util.List;
@Data @Data
@XmlRootElement
public class QuizzDTO { public class QuizzDTO {
private int id; 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; package fr.istic.taa.jaxrs.DTO;
import lombok.AllArgsConstructor; import jakarta.xml.bind.annotation.XmlRootElement;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data @Data
@XmlRootElement
public class SessionDTO { 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; package fr.istic.taa.jaxrs.DTO;
import lombok.AllArgsConstructor; import jakarta.xml.bind.annotation.XmlRootElement;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor;
@Data @Data
@XmlRootElement
public class UtilisateurDTO { public class UtilisateurDTO {
private int id; private int id;
private String name; 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.DTO.QuestionDTO;
import fr.istic.taa.jaxrs.metier.Question; 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 org.mapstruct.factory.Mappers;
import java.util.ArrayList;
import java.util.List;
@Mapper
public interface QuestionMapper { public interface QuestionMapper {
QuestionMapper INSTANCE = Mappers.getMapper( QuestionMapper.class ); QuestionMapper INSTANCE = Mappers.getMapper( QuestionMapper.class );
@Mapping(target = "reponses_string", expression = "java(question_ReponseString(question.getReponse()))")
QuestionDTO toDTO(Question question); QuestionDTO toDTO(Question question);
Question toEntity(QuestionDTO questionDTO); 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; package fr.istic.taa.jaxrs.Mapper;
import fr.istic.taa.jaxrs.DTO.QuizzDTO; import fr.istic.taa.jaxrs.DTO.QuizzDTO;
import fr.istic.taa.jaxrs.metier.Question;
import fr.istic.taa.jaxrs.metier.Quizz; import fr.istic.taa.jaxrs.metier.Quizz;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers; import org.mapstruct.factory.Mappers;
import java.util.ArrayList;
import java.util.List;
@Mapper
public interface QuizzMapper { public interface QuizzMapper {
QuizzMapper INSTANCE = Mappers.getMapper( QuizzMapper.class ); 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); QuizzDTO toDTO(Quizz quizz);
Quizz toEntity(QuizzDTO quizzDTO); 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; package fr.istic.taa.jaxrs.Mapper;
import fr.istic.taa.jaxrs.DTO.SessionDTO; 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.Session;
import fr.istic.taa.jaxrs.metier.Utilisateur;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers; import org.mapstruct.factory.Mappers;
import java.util.ArrayList;
import java.util.List;
@Mapper
public interface SessionMapper { public interface SessionMapper {
SessionMapper INSTANCE = Mappers.getMapper( SessionMapper.class ); 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); 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") @OneToMany(mappedBy = "quizz")
private List<Question> questions=new ArrayList<Question>(); 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) @Column(unique=true)
private int codePIN; private int codePIN;
@OneToMany(mappedBy="session") @OneToMany(mappedBy="session")
private List<Quizz> quizzs = new ArrayList<>(); private List<Quizz> quizzs = new ArrayList<>();

View File

@@ -1,4 +1,12 @@
package fr.istic.taa.jaxrs.rest; 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 { public class QuestionResource {
} }

View File

@@ -1,4 +1,12 @@
package fr.istic.taa.jaxrs.rest; 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 { public class QuizzResource {
} }

View File

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