diff --git a/application/model/src/main/java/org/fuseri/model/dto/exercise/QuestionCreateDto.java b/application/model/src/main/java/org/fuseri/model/dto/exercise/QuestionCreateDto.java index 9c1869f41c262775176ccb12d7006fcc86677ed1..738a9031739586351ba52b993c7522e0dbcb226d 100644 --- a/application/model/src/main/java/org/fuseri/model/dto/exercise/QuestionCreateDto.java +++ b/application/model/src/main/java/org/fuseri/model/dto/exercise/QuestionCreateDto.java @@ -1,5 +1,7 @@ package org.fuseri.model.dto.exercise; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; import lombok.AllArgsConstructor; import lombok.Getter; @@ -8,7 +10,13 @@ import java.util.List; @AllArgsConstructor @Getter public class QuestionCreateDto { + + @NotBlank private String text; + + @NotBlank private String exerciseId; + + @Valid private List<AnswerInQuestionCreateDto> answers; } diff --git a/application/model/src/main/java/org/fuseri/model/dto/exercise/QuestionDto.java b/application/model/src/main/java/org/fuseri/model/dto/exercise/QuestionDto.java index 219439b894b925095afcbd5dabcfd02fe192ed4a..6aa390931227ecb391227689ed1451c5f226aa7e 100644 --- a/application/model/src/main/java/org/fuseri/model/dto/exercise/QuestionDto.java +++ b/application/model/src/main/java/org/fuseri/model/dto/exercise/QuestionDto.java @@ -1,5 +1,7 @@ package org.fuseri.model.dto.exercise; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; import lombok.Getter; import lombok.Setter; import org.fuseri.model.dto.common.DomainObjectDto; @@ -9,7 +11,13 @@ import java.util.List; @Getter @Setter public class QuestionDto extends DomainObjectDto { + + @NotBlank private String text; + + @NotBlank private String exerciseId; + + @Valid private List<AnswerDto> answers; } diff --git a/application/model/src/main/java/org/fuseri/model/dto/exercise/QuestionUpdateDto.java b/application/model/src/main/java/org/fuseri/model/dto/exercise/QuestionUpdateDto.java index 80514c32d0f42b036e8fe8793cf53a0a539e6ff6..2efa520493c718e108a180fabae12a4887913cab 100644 --- a/application/model/src/main/java/org/fuseri/model/dto/exercise/QuestionUpdateDto.java +++ b/application/model/src/main/java/org/fuseri/model/dto/exercise/QuestionUpdateDto.java @@ -1,11 +1,16 @@ package org.fuseri.model.dto.exercise; +import jakarta.validation.constraints.NotBlank; import lombok.Builder; import lombok.Getter; @Getter @Builder public class QuestionUpdateDto { + + @NotBlank private String text; + + @NotBlank private String exerciseId; } diff --git a/application/module-exercise/src/main/java/org/fuseri/moduleexercise/question/QuestionController.java b/application/module-exercise/src/main/java/org/fuseri/moduleexercise/question/QuestionController.java index f4628a128f39649db4dbdaf9061afd366b9caa4f..bd217cc1c00f36d02b1b074b6e9028c20e291220 100644 --- a/application/module-exercise/src/main/java/org/fuseri/moduleexercise/question/QuestionController.java +++ b/application/module-exercise/src/main/java/org/fuseri/moduleexercise/question/QuestionController.java @@ -1,6 +1,9 @@ package org.fuseri.moduleexercise.question; import jakarta.persistence.EntityNotFoundException; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.PositiveOrZero; import org.fuseri.model.dto.common.Result; import org.fuseri.model.dto.exercise.QuestionCreateDto; import org.fuseri.model.dto.exercise.QuestionDto; @@ -37,7 +40,7 @@ public class QuestionController { * @return a QuestionDto object representing the found question */ @GetMapping("/{id}") - public QuestionDto find(@PathVariable String id) { + public QuestionDto find(@NotBlank @PathVariable String id) { return questionFacade.find(id); } @@ -48,8 +51,9 @@ public class QuestionController { * @param page the page number of the questions to retrieve * @return a Result object containing a list of QuestionDto objects and pagination information */ - @GetMapping("/exercise/{exerciseId}") - public Result<QuestionDto> findByExerciseId(@PathVariable String exerciseId, @RequestParam int page) { + @GetMapping("/exercise/{exercise-id}") + public Result<QuestionDto> findByExerciseId(@NotBlank @PathVariable("exercise-id") String exerciseId, + @PositiveOrZero @RequestParam int page) { return questionFacade.findByExerciseId(exerciseId, page); } @@ -61,7 +65,7 @@ public class QuestionController { * @throws ResponseStatusException if the exercise with exerciseId from QuestionCreateDto does not exist */ @PostMapping - public QuestionDto addQuestion(@RequestBody QuestionCreateDto dto) { + public QuestionDto addQuestion(@Valid @RequestBody QuestionCreateDto dto) { try { return questionFacade.create(dto); } catch (EntityNotFoundException e) { @@ -78,7 +82,7 @@ public class QuestionController { * @throws ResponseStatusException if the question with id doesn't exist or its exercise doesn't exist */ @PutMapping("/{id}") - public QuestionDto updateQuestion(@PathVariable String id, @RequestBody QuestionUpdateDto dto) { + public QuestionDto updateQuestion(@NotBlank @PathVariable String id, @Valid @RequestBody QuestionUpdateDto dto) { try { return questionFacade.update(id, dto); } catch (IllegalArgumentException e) { @@ -94,7 +98,7 @@ public class QuestionController { * @param id of question to delete */ @DeleteMapping("/{id}") - public void deleteQuestion(@PathVariable String id) { + public void deleteQuestion(@NotBlank @PathVariable String id) { questionFacade.delete(id); } } \ No newline at end of file