From c6a529bcabd22fc0fbb7911ab658f64a26e5f898 Mon Sep 17 00:00:00 2001 From: Dominika Zemanovicova <xzemanov@fi.muni.cz> Date: Sun, 16 Apr 2023 15:18:21 +0200 Subject: [PATCH] Change QuestionMapper to map to entities inside dto --- .../moduleexercise/answer/AnswerMapper.java | 11 +++++ .../question/QuestionMapper.java | 48 +++++++++++++++++-- 2 files changed, 54 insertions(+), 5 deletions(-) diff --git a/application/module-exercise/src/main/java/org/fuseri/moduleexercise/answer/AnswerMapper.java b/application/module-exercise/src/main/java/org/fuseri/moduleexercise/answer/AnswerMapper.java index 3dec5ca6..f1cb4626 100644 --- a/application/module-exercise/src/main/java/org/fuseri/moduleexercise/answer/AnswerMapper.java +++ b/application/module-exercise/src/main/java/org/fuseri/moduleexercise/answer/AnswerMapper.java @@ -6,6 +6,9 @@ import org.fuseri.model.dto.exercise.AnswerInQuestionCreateDto; import org.fuseri.moduleexercise.common.DomainMapper; import org.mapstruct.Mapper; +import java.util.List; +import java.util.Set; + /** * Mapper between Answers and their corresponding DTOs */ @@ -20,6 +23,14 @@ public interface AnswerMapper extends DomainMapper<Answer, AnswerDto> { */ Answer fromCreateDto(AnswerCreateDto dto); + /** + * Convert List of AnswerInQuestionCreateDto to List of corresponding Answers + * + * @param dtos to be converted + * @return corresponding list of Answers + */ + Set<Answer> fromCreateDtoList(List<AnswerInQuestionCreateDto> dtos); + /** * Convert DTO of type AnswerInQuestionCreateDto to Answer * @param dto DTO to be converted diff --git a/application/module-exercise/src/main/java/org/fuseri/moduleexercise/question/QuestionMapper.java b/application/module-exercise/src/main/java/org/fuseri/moduleexercise/question/QuestionMapper.java index 9c4e62a2..b3cd9707 100644 --- a/application/module-exercise/src/main/java/org/fuseri/moduleexercise/question/QuestionMapper.java +++ b/application/module-exercise/src/main/java/org/fuseri/moduleexercise/question/QuestionMapper.java @@ -1,17 +1,53 @@ package org.fuseri.moduleexercise.question; +import org.fuseri.model.dto.exercise.AnswerInQuestionCreateDto; import org.fuseri.model.dto.exercise.QuestionCreateDto; import org.fuseri.model.dto.exercise.QuestionDto; import org.fuseri.model.dto.exercise.QuestionUpdateDto; +import org.fuseri.moduleexercise.answer.Answer; +import org.fuseri.moduleexercise.answer.AnswerMapper; import org.fuseri.moduleexercise.common.DomainMapper; +import org.fuseri.moduleexercise.exercise.Exercise; +import org.fuseri.moduleexercise.exercise.ExerciseService; import org.mapstruct.Mapper; import org.mapstruct.Mapping; +import org.mapstruct.Named; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.List; +import java.util.Set; /** * Mapper between Questions and their corresponding DTOs */ -@Mapper -public interface QuestionMapper extends DomainMapper<Question, QuestionDto> { +@Mapper(componentModel = "spring", uses = {AnswerMapper.class, ExerciseService.class}) +public abstract class QuestionMapper implements DomainMapper<Question, QuestionDto> { + + @Autowired + private ExerciseService exerciseService; + + @Autowired + private AnswerMapper answerMapper; + + @Named("mapIdToExercise") + public Exercise mapIdToExercise(Long id) { + return exerciseService.find(id); + } + + @Named("mapDtoAnswersToAnswers") + public Set<Answer> mapDtoAnswersToAnswers(List<AnswerInQuestionCreateDto> dtos) { + return answerMapper.fromCreateDtoList(dtos); + } + + /** + * Convert entity to its corresponding DTO + * + * @param question to be converted + * @return corresponding DTO created from question + */ + @Override + @Mapping(target = "exerciseId", source = "question.exercise.id") + public abstract QuestionDto toDto(Question question); /** * Convert DTO of type QuestionCreateDto to Question @@ -19,8 +55,10 @@ public interface QuestionMapper extends DomainMapper<Question, QuestionDto> { * @param dto DTO to be converted * @return corresponding Question entity created from DTO */ - @Mapping(target = "answers", ignore = true) - Question fromCreateDto(QuestionCreateDto dto); + @Mapping(target = "exercise", source = "dto.exerciseId", qualifiedByName = "mapIdToExercise") + @Mapping(target = "answers", source = "dto.answers", qualifiedByName = "mapDtoAnswersToAnswers") + public abstract Question fromCreateDto(QuestionCreateDto dto); - Question fromUpdateDto(QuestionUpdateDto dto); + @Mapping(target = "exercise", source = "dto.exerciseId", qualifiedByName = "mapIdToExercise") + public abstract Question fromUpdateDto(QuestionUpdateDto dto); } -- GitLab