Реализовать ендпоинт 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 и сервис? Если есть пример, скиньте ссылку, пожалуйста.
