ExerciseController.java
package mirante.api.exercise;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import mirante.api.exercise.option.OptionDTO;
import org.springframework.web.bind.annotation.*;
import org.springframework.http.HttpStatus;
import org.springframework.web.server.ResponseStatusException;
@CrossOrigin
@RestController
public class ExerciseController {
private final ExerciseRepository repository;
ExerciseController(ExerciseRepository repository) {
this.repository = repository;
}
@GetMapping("/exercise")
List<ExerciseDTO> getExercises() {
List<Exercise> exercises = repository.findAll();
List<ExerciseDTO> exerciseDTOs = new ArrayList<>();
exercises.forEach(e -> {
ExerciseDTO dto = new ExerciseDTO();
dto.id = e.getId();
dto.instruction = e.getInstruction();
dto.set = e.getSetId();
dto.options = new HashSet<>();
e.getOptions().forEach(o -> {
OptionDTO optionDTO = new OptionDTO();
optionDTO.id = o.getId();
optionDTO.content = o.getContent();
optionDTO.place = o.getPlace();
optionDTO.correct = o.getCorrect();
optionDTO.exercise = o.getExerciseId();
dto.options.add(optionDTO);
});
exerciseDTOs.add(dto);
});
return exerciseDTOs;
}
@PostMapping("/exercise")
@ResponseStatus(HttpStatus.CREATED)
Exercise newExercise(@RequestBody Exercise newExercise) {
return repository.save(newExercise);
}
@GetMapping("/exercise/{id}")
Exercise one(@PathVariable String id) {
return repository.findById(id)
.orElseThrow(() -> new ResponseStatusException(
HttpStatus.NOT_FOUND, "Exercise with id ${id} not found")
);
}
@DeleteMapping("/exercise/{id}")
void deleteExercise(@PathVariable String id) {
repository.deleteById(id);
}
}