package com.healthcare.ohctech.controller; import com.healthcare.ohctech.dto.ExerciseDto; import com.healthcare.ohctech.entity.Exercise; import com.healthcare.ohctech.service.impl.ExerciseServiceImpl; import com.healthcare.ohctech.util.PaginationUtil; import jakarta.validation.Valid; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.util.Map; @RestController @RequestMapping("/exercises") public class ExerciseController { @Autowired private ExerciseServiceImpl exerciseServiceImpl; @GetMapping("/{exeId}") public ResponseEntity getExerciseById(@PathVariable Long exeId) { Exercise exercise = exerciseServiceImpl.getExerciseById(exeId); ExerciseDto exerciseDto = new ExerciseDto( exercise.getId(), exercise.getExerciseMaster().getId(), exercise.getMinutes(), exercise.getModifiedBy() ); return new ResponseEntity<>(exerciseDto, HttpStatus.OK); } @GetMapping public ResponseEntity getAllExercises(@RequestParam(required = false) Integer page, @RequestParam(required = false) Integer size, @RequestParam(required = false) String sortBy, @RequestParam(required = false) String sortOrder) { Pageable pageable = PaginationUtil.getPageableWithDefaults(page, size, sortBy, sortOrder); Page exercisePage = exerciseServiceImpl.getAllExercises(pageable); Page exerciseDtoPage = exercisePage.map(exercise -> new ExerciseDto( exercise.getId(), exercise.getExerciseMaster().getId(), exercise.getMinutes(), exercise.getModifiedBy() )); Map response = PaginationUtil.getPageResponse(exerciseDtoPage); return new ResponseEntity<>(response, HttpStatus.OK); } @PostMapping public ResponseEntity addExercise(@Valid @RequestBody ExerciseDto exerciseDto) { exerciseServiceImpl.addExercise(exerciseDto); return new ResponseEntity<>(HttpStatus.CREATED); } @PutMapping("/{exeId}") public ResponseEntity updateExercise(@Valid @RequestBody ExerciseDto exerciseDto) { exerciseServiceImpl.updateExercise(exerciseDto); return new ResponseEntity<>(HttpStatus.OK); } @DeleteMapping("/{exeId}") public ResponseEntity deleteExercise(@PathVariable Long exeId) { exerciseServiceImpl.deleteExercise(exeId); return new ResponseEntity<>(HttpStatus.OK); } }