Реализовать ендпоинт POST /api/admin/medias/{id}/questions принимает List

Даны сущности:

 QuestionRequestDto {
     Integer position;
     String question;
     List<AnswerRequestDto> answers;
     List<ResultRequestDto> results;
    } 
    AnswerRequestDto {
     String answer; 
     Boolean isRight;
    }
    
    ResultRequestDto {
    Integer countRightAnswer;
    String result;
    }
    Answer {
     Long id;
    
     @ManyToOne(Lazy, optional = false)
     Question question ;
    
     String answer;
     
     Boolean isRight;
    }
    Result {
     Long id;
    
     @ManyToOne(Lazy, optional = false)
     Question question ;
    
     Integer countRightAnswer;
     
     String result;
    }
    QuestionMedia {
    
     @ManyToOne(Lazy, optional = false)
     Media media;
    
     @ManyToOne(Lazy, optional = false)
     Question question;
    }
    
    
    Question {
     Long id;
     Integer position;
     String question;
    }

введите сюда описание изображения

Реализовать ендпоинт POST /api/admin/medias/{id}/questions принимает List

Начатое решение. Контроллер:

@RestController
@RequiredArgsConstructor
@RequestMapping("/api/admin/medias")
public class AdminMediasRestController {
    private final MediaServiceFacadeImpl mediaServiceFacadeImpl;
    @PostMapping("/{id}/questions")
    public ResponseEntity<Void> addQuestions(...questions) {
//...
        return ResponseEntity.ok().build();
    }

}

Мапперы:

@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;
    }
}
@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());
    }
}
@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());
    }
}

Дальше непонятно - как в контроллере получить list questions c помощью мапера c учетом того, что таблица(сущность) Question связана с 2 другими Answer и Result (Многие к одному), какие должны быть Repository и Service? Пыталась сделать кастомный Repository

Page<QuestionRequestDto> getQuestionByCriteria(Answer ansers, Result results);

Непонятно, как заполнить дальше класс Repository и сервис? Если есть пример, скиньте ссылку, пожалуйста.


Ответы (0 шт):