diff --git a/train-eat-repeat/src/main/java/org/athletes/traineatrepeat/controller/ExerciseController.java b/train-eat-repeat/src/main/java/org/athletes/traineatrepeat/controller/ExerciseController.java index d8b156d..ee42d17 100644 --- a/train-eat-repeat/src/main/java/org/athletes/traineatrepeat/controller/ExerciseController.java +++ b/train-eat-repeat/src/main/java/org/athletes/traineatrepeat/controller/ExerciseController.java @@ -1,35 +1,44 @@ package org.athletes.traineatrepeat.controller; -import org.athletes.traineatrepeat.converter.ExerciseConverter; +import lombok.RequiredArgsConstructor; import org.athletes.traineatrepeat.model.request.ExerciseRequest; import org.athletes.traineatrepeat.model.response.ExerciseResponse; -import org.athletes.traineatrepeat.repository.ExerciseRepository; -import org.athletes.traineatrepeat.repository.dto.ExerciseDTO; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import org.athletes.traineatrepeat.service.ExerciseService; + +import java.util.List; + @RestController @RequestMapping("/exercises") +@RequiredArgsConstructor public class ExerciseController { - private final ExerciseRepository repository; - private final ExerciseConverter converter; - - public ExerciseController(ExerciseRepository repository, ExerciseConverter converter) { - this.repository = repository; - this.converter = converter; - } + private final ExerciseService exerciseService; @PostMapping("/submit-exercise") public ResponseEntity submitExercise(@RequestBody ExerciseRequest request) { - ExerciseDTO dto = converter.fromRequest(request); - ExerciseDTO saved = repository.save(dto); - ExerciseResponse response = converter.toResponse(saved); + ExerciseResponse response = exerciseService.submitExercise(request); return ResponseEntity.status(HttpStatus.CREATED).body(response); } + + @GetMapping + public ResponseEntity> getAllExercises() { + List responses = exerciseService.getAllExercises(); + return ResponseEntity.ok(responses); + } + + @GetMapping("/{id}") + public ResponseEntity getExerciseById(@PathVariable String id) { + ExerciseResponse response = exerciseService.getExerciseById(id); + return ResponseEntity.ok(response); + } } \ No newline at end of file diff --git a/train-eat-repeat/src/main/java/org/athletes/traineatrepeat/repository/ExerciseRepository.java b/train-eat-repeat/src/main/java/org/athletes/traineatrepeat/repository/ExerciseRepository.java index 5f8d508..f7ab0f3 100644 --- a/train-eat-repeat/src/main/java/org/athletes/traineatrepeat/repository/ExerciseRepository.java +++ b/train-eat-repeat/src/main/java/org/athletes/traineatrepeat/repository/ExerciseRepository.java @@ -3,11 +3,37 @@ import org.athletes.traineatrepeat.repository.dto.ExerciseDTO; import org.springframework.stereotype.Repository; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.concurrent.ConcurrentHashMap; + @Repository public class ExerciseRepository { + private final Map storage = new ConcurrentHashMap<>(); + private static Long idCounter = 0L; + public ExerciseDTO save(ExerciseDTO dto) { - // TODO: Implement save to database logic - return dto; + String newId = (dto.id() == null || dto.id().isEmpty()) ? String.valueOf(++idCounter) : dto.id(); + + ExerciseDTO savedDto = ExerciseDTO.builder() + .id(newId) + .name(dto.name()) + .MET(dto.MET()) + .build(); + + storage.put(newId, savedDto); + System.out.println("Сохранено упражнение: " + savedDto); + return savedDto; + } + + public List findAll() { + return new ArrayList<>(storage.values()); + } + + public Optional findById(String id) { + return Optional.ofNullable(storage.get(id)); } } \ No newline at end of file diff --git a/train-eat-repeat/src/main/java/org/athletes/traineatrepeat/service/ExerciseService.java b/train-eat-repeat/src/main/java/org/athletes/traineatrepeat/service/ExerciseService.java new file mode 100644 index 0000000..a86c653 --- /dev/null +++ b/train-eat-repeat/src/main/java/org/athletes/traineatrepeat/service/ExerciseService.java @@ -0,0 +1,39 @@ +package org.athletes.traineatrepeat.service; + +import lombok.RequiredArgsConstructor; +import org.athletes.traineatrepeat.converter.ExerciseConverter; +import org.athletes.traineatrepeat.model.request.ExerciseRequest; +import org.athletes.traineatrepeat.model.response.ExerciseResponse; +import org.athletes.traineatrepeat.repository.ExerciseRepository; +import org.athletes.traineatrepeat.repository.dto.ExerciseDTO; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.stream.Collectors; + +@Service +@RequiredArgsConstructor +public class ExerciseService { + + private final ExerciseRepository exerciseRepository; + private final ExerciseConverter exerciseConverter; + + public ExerciseResponse submitExercise(ExerciseRequest request) { + ExerciseDTO dtoToSave = exerciseConverter.fromRequest(request); + ExerciseDTO savedDto = exerciseRepository.save(dtoToSave); + return exerciseConverter.toResponse(savedDto); + } + + public List getAllExercises() { + List dtos = exerciseRepository.findAll(); + return dtos.stream() + .map(exerciseConverter::toResponse) + .collect(Collectors.toList()); + } + + public ExerciseResponse getExerciseById(String id) { + return exerciseRepository.findById(id) + .map(exerciseConverter::toResponse) + .orElseThrow(() -> new RuntimeException("Exercise not found with ID: " + id)); + } +} \ No newline at end of file