Как вытащить результат сопоставления маппера в слоях?
Есть сущности Answer и Result, связанные с другой сущностью Question как многие к одному. В questions необходимо передать не id этих зависимостей, а поля, поэтому QuestionDTO получает 2 дополнительных поля List <AnswerRequestDto> answers и List<ResultRequestDto> results.После их сопоставления в маппере, как это сопоставление применить в Repository, Service, Controller чтобы добавить question?
@Entity
@Table(name = "questions")
@Getter
@Setter
public class Question {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id;
private String question;
@Column(name = "position")
private Integer position;
}
@Getter
@Setter
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class QuestionRequestDto {
private Integer position;
private String question;
private List<AnswerRequestDto> answers;
private List<ResultRequestDto> results;
}
@Mapper(config = ConfigMapper.class)
public interface AnswerMapper extends DtoMapper<AnswerRequestDto, Answer>{
default List<AnswerRequestDto> toDto(Set<Answer> answers) {
return toDto(new ArrayList<>(answers));
}
default Set<Answer> map(List<Long> answersIds) {
return answersIds.stream()
.map(id -> Answer.builder().id(id).build())
.collect(Collectors.toSet());
}
}
@Builder
@Entity
@Table(name = "answers")
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class Answer {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id;
private String answer;
private boolean isRight;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "question_id")
private Question question;
}
@Builder
@Entity
@Table(name = "results")
@Getter
@Setter
public class Result {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id;
private String result;
private int countRightAnswer;
@ManyToOne
@JoinColumn(name = "question_id")
private Question question;
}
@Mapper(config = ConfigMapper.class)
public interface ResultMapper extends DtoMapper<ResultRequestDto, Result> {
default List<ResultRequestDto> toDto(Set<Result> results) {
return toDto(new ArrayList<>(results));
}
default Set<Result> map(List<Long> resultsIds) {
return resultsIds.stream()
.map(id -> Result.builder().id(id).build())
.collect(Collectors.toSet());
}
}
@Mapper(config = ConfigMapper.class, uses = {AnswerMapper.class, ResultMapper.class})
public interface QuestionMapper extends DtoMapper<QuestionRequestDto, Question> {
QuestionRequestDto toDto(Question question);
default QuestionRequestDto toDto(Question question,
List<AnswerRequestDto> answers,
List<ResultRequestDto> results) {
QuestionRequestDto questionRequestDto = toDto(question);
questionRequestDto.setAnswers(answers);
questionRequestDto.setResults(results);
return questionRequestDto;
}
}