QuizQuestionRestController.java
package sk.iway.iwcm.components.quiz.rest;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import sk.iway.iwcm.Tools;
import sk.iway.iwcm.components.quiz.jpa.QuizQuestionEntity;
import sk.iway.iwcm.components.quiz.jpa.QuizQuestionRepository;
import sk.iway.iwcm.system.datatable.Datatable;
import sk.iway.iwcm.system.datatable.DatatablePageImpl;
import sk.iway.iwcm.system.datatable.DatatableRestControllerV2;
@RestController
@RequestMapping("/admin/rest/quiz/question")
@PreAuthorize("@WebjetSecurityService.hasPermission('cmp_quiz')")
@Datatable
public class QuizQuestionRestController extends DatatableRestControllerV2<QuizQuestionEntity, Long> {
private final QuizQuestionRepository quizQuestionRepository;
@Autowired
public QuizQuestionRestController(QuizQuestionRepository quizQuestionRepository) {
super(quizQuestionRepository);
this.quizQuestionRepository = quizQuestionRepository;
}
@Override
public Page<QuizQuestionEntity> getAllItems(Pageable pageable) {
Integer quizId = Tools.getIntValue(getRequest().getParameter("quizId"), -1);
//-userId questions that are made under quiz, that is not saved yet
if(quizId == -1) quizId = -getUser().getUserId();
DatatablePageImpl<QuizQuestionEntity> page = new DatatablePageImpl<>( quizQuestionRepository.findAllByQuizId(quizId) );
return page;
}
@Override
public void beforeSave(QuizQuestionEntity entity) {
//CREATE
if(entity.getId() == null || entity.getId() < 1) {
//There must be fill at least one question option (aka answer)
boolean isAtLEastOneFill = false;
for(int i = 1; i <= 6; i++) {
if( Tools.isNotEmpty( entity.getOption(i) ) ) {
isAtLEastOneFill = true;
break;
}
}
if(!isAtLEastOneFill) throwError("components.quiz.at_lest_one_answer_error");
//If quizId == null -> new quiz (tmp set -userId)
int quizId = entity.getQuizId() == null ? Tools.getIntValue(getRequest().getParameter("quizId"), -1) : entity.getQuizId();
if(quizId == -1) entity.setQuizId( -getUser().getUserId() );
else entity.setQuizId( quizId );
Optional<QuizQuestionEntity> qq = quizQuestionRepository.findTopByQuizIdOrderByPositionDesc( entity.getQuizId() );
if(qq.isPresent()) entity.setPosition( qq.get().getPosition() + 10 );
else entity.setPosition( 10 );
}
}
}