Skip to content

Commit

Permalink
Merge pull request #59 from STEPPER-UMC-6th/feat/39
Browse files Browse the repository at this point in the history
[FEAT] 오늘의 운동 불러오기, 단계별 상태 수정 코드 구현
  • Loading branch information
lehojun authored Aug 4, 2024
2 parents f2113e3 + b8c5d1d commit 3181ccd
Show file tree
Hide file tree
Showing 16 changed files with 186 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -36,11 +36,16 @@ public enum ErrorStatus implements BaseErrorCode {

// rate_diary
EXERCISE_CARD_DOES_NOT_BELONG_TO_USER(HttpStatus.BAD_REQUEST, "RATE_DIARY4001", "운동 카드가 유저의 것이 아닙니다."),
RATE_DIARY_NOT_FOUND(HttpStatus.BAD_REQUEST, "RATE_DIARY4001", "평가 일지를 찾을 수 없습니다.");
RATE_DIARY_NOT_FOUND(HttpStatus.BAD_REQUEST, "RATE_DIARY4001", "평가 일지를 찾을 수 없습니다."),

//exercise_step
EXERCISE_STEP_ID_NOT_FOUND(HttpStatus.BAD_REQUEST, "EXERCISE_STEP4001", "스텝 아이디를 찾을 수 없습니다.");



private final HttpStatus httpStatus;
private final String code;
private final String message;

@Override
public ErrorReasonDTO getReason() {
return ErrorReasonDTO.builder()
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.example.stepperbackend.apiPayload.exception.handler;

import com.example.stepperbackend.apiPayload.code.BaseErrorCode;
import com.example.stepperbackend.apiPayload.exception.GeneralException;

public class ExerciseStepHandler extends GeneralException {
public ExerciseStepHandler(BaseErrorCode code) {
super(code);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
import com.example.stepperbackend.web.dto.ExerciseCardDto;
import com.example.stepperbackend.web.dto.ExerciseStepDto;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;

Expand Down Expand Up @@ -41,7 +43,7 @@ public static ExerciseCardDto.ExerciseCardResponseDto toDto(ExerciseCard exercis
.second(exerciseCard.getSecond())
.materials(exerciseCard.getMaterials())
.bodyPart(exerciseCard.getBodyPart())
.setpList(exerciseStepList)
.stepList(exerciseStepList)
.build();
}

Expand All @@ -62,4 +64,36 @@ public static ExerciseCardDto.ExerciseCardStatusResponseDto toStatusResponseDto(
.status(exerciseCard.isStatus())
.build();
}


public static List<ExerciseCardDto.ToDayExerciseResponseDto> toDayExerciseListDto(List<ExerciseCard> exerciseCardList, List<ExerciseStep> exerciseStepList) {

// 결과 DTO 리스트 초기화
List<ExerciseCardDto.ToDayExerciseResponseDto> responseDtoList = new ArrayList<>();

// 각 운동 카드에 대해 DTO 생성
for (ExerciseCard exerciseCard : exerciseCardList) {
// 해당 카드에 대한 운동 단계 필터링
List<ExerciseStep> stepsForCard = exerciseStepList.stream()
.filter(step -> step.getExerciseCard().equals(exerciseCard))
.toList();

// DTO 생성
ExerciseCardDto.ToDayExerciseResponseDto responseDto = ExerciseCardDto.ToDayExerciseResponseDto.builder()
.id(exerciseCard.getId())
.bodyPart(exerciseCard.getBodyPart())
.stepList(stepsForCard.stream()
.map(ExerciseStepConverter::toDto)
.collect(Collectors.toList()))
.build();

// 결과 리스트에 추가
responseDtoList.add(responseDto);
}

return responseDtoList;
}
}



Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,9 @@ public static ExerciseStepDto.ExerciseStepResponseDto toDto(ExerciseStep step) {
MyExerciseDto.CheckExerciseResponseDTO myExerciseDto = MyExerciseConverter.toCheckExerciseDTO(step.getMyExercise());

return ExerciseStepDto.ExerciseStepResponseDto.builder()
.stepId(step.getId())
.step(step.getStep())
.step_status(step.isStepStatus())
.myExercise(myExerciseDto)
.build();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
package com.example.stepperbackend.repository;

import com.example.stepperbackend.domain.ExerciseCard;
import com.example.stepperbackend.domain.ExerciseStep;
import com.example.stepperbackend.domain.Member;
import com.example.stepperbackend.domain.enums.BodyPart;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;

import java.time.LocalDate;
import java.util.Optional;

import java.util.List;
Expand All @@ -19,6 +21,8 @@ public interface ExerciseCardRepository extends JpaRepository<ExerciseCard, Long
@Query("SELECT e FROM ExerciseCard e WHERE e.member = :member AND MONTH(e.date) = :month")
List<ExerciseCard> findAllByMemberAndMonth(@Param("member") Member member, @Param("month") int month);

List<ExerciseCard> findAllByMemberAndDate(Member member, LocalDate date);

@Query("SELECT e FROM ExerciseCard e WHERE e.member = :member AND e.bodyPart = :bodyPart")
List<ExerciseCard> findByBodyPartAndMember(@Param("bodyPart") BodyPart bodyPart, @Param("member") Member member);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.example.stepperbackend.service.MyExerciseService;

import com.example.stepperbackend.domain.MyExercise;
import com.example.stepperbackend.domain.enums.BodyPart;
import com.example.stepperbackend.web.dto.MyExerciseDto;

import java.util.List;
Expand All @@ -9,5 +10,5 @@ public interface MyExerciseService {

public MyExerciseDto.AddExerciseResponseDTO addMyExercise(MyExerciseDto.AddExerciseRequestDto request, String memberId);

public List<MyExercise> checkMyExercise(MyExerciseDto.CheckExerciseRequestDto request, String memberId);
public List<MyExercise> checkMyExercise(BodyPart bodyPart, String memberId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import com.example.stepperbackend.converter.MyExerciseConverter;
import com.example.stepperbackend.domain.Member;
import com.example.stepperbackend.domain.MyExercise;
import com.example.stepperbackend.domain.enums.BodyPart;
import com.example.stepperbackend.repository.MemberRepository;
import com.example.stepperbackend.repository.MyExerciseRepository;
import com.example.stepperbackend.web.dto.MyExerciseDto;
Expand All @@ -33,18 +34,16 @@ public MyExerciseDto.AddExerciseResponseDTO addMyExercise(MyExerciseDto.AddExerc
}


public List<MyExercise> checkMyExercise(MyExerciseDto.CheckExerciseRequestDto request, String memberEmail) {
public List<MyExercise> checkMyExercise(BodyPart bodyPart, String memberEmail) {
List<MyExercise> exercises = myExerciseRepository.findAll();

List<MyExercise> filteredList = exercises.stream()
.filter(myExercise -> myExercise.getBody_part().equals(request.getBody_part())&&
myExercise.getMember().getEmail().equals(memberEmail)).toList();

if(filteredList.isEmpty()){
throw new ExerciseHandler(ErrorStatus.MY_EXERCISE_NOT_FOUND);
}
List<MyExercise> filteredList = exercises.stream()
.filter(myExercise -> myExercise.getBody_part().equals(bodyPart) &&
myExercise.getMember().getEmail().equals(memberEmail)).toList();

if (filteredList.isEmpty()) {
throw new ExerciseHandler(ErrorStatus.MY_EXERCISE_NOT_FOUND);
}
return filteredList;

}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package com.example.stepperbackend.service.exerciseCardService;

import com.example.stepperbackend.domain.ExerciseCard;
import com.example.stepperbackend.domain.enums.BodyPart;
import com.example.stepperbackend.web.dto.ExerciseCardDto;

import java.time.LocalDate;
import java.util.List;

public interface ExerciseCardService {
Expand All @@ -15,6 +17,8 @@ public interface ExerciseCardService {

List<ExerciseCardDto.ExerciseCardStatusResponseDto> getExerciseStatusByMonth(int month, String email);

List<ExerciseCardDto.ToDayExerciseResponseDto> getTodayExercises(LocalDate date, String memberEmail);

List<ExerciseCardDto.ExerciseCardWeekResponseDto> getExerciseCardWeek(BodyPart bodyPart, String email);

}
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,10 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;



import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

Expand Down Expand Up @@ -138,4 +141,24 @@ public List<ExerciseCardDto.ExerciseCardWeekResponseDto> getExerciseCardWeek(Bod
.weeks(weeks)
.build());
}



@Override
public List<ExerciseCardDto.ToDayExerciseResponseDto> getTodayExercises(LocalDate date, String memberEmail) {
Member member = memberRepository.findByEmail(memberEmail)
.orElseThrow(() -> new MemberHandler(ErrorStatus.MEMBER_NOT_FOUND));
List<ExerciseCard> exerciseCardList = exerciseCardRepository.findAllByMemberAndDate(member, date);
List<ExerciseStep> exerciseStepList = new ArrayList<>();

// 각 운동 카드에 대한 운동 단계 조회
for (ExerciseCard exerciseCard : exerciseCardList) {
List<ExerciseStep> stepsForCard = exerciseStepRepository.findAllByExerciseCard(exerciseCard);
exerciseStepList.addAll(stepsForCard); // 각 카드의 운동 단계를 리스트에 추가
}
if(exerciseCardList.isEmpty()) throw new ExerciseCardHandler(ErrorStatus.EXERCISE_CARD_NOT_FOUND);

return ExerciseCardConverter.toDayExerciseListDto(exerciseCardList, exerciseStepList);

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.example.stepperbackend.service.exerciseStep;


public interface ExerciseStepService {
void modifyStep(Long stepId);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.example.stepperbackend.service.exerciseStep;

import com.example.stepperbackend.apiPayload.code.status.ErrorStatus;
import com.example.stepperbackend.apiPayload.exception.handler.ExerciseStepHandler;
import com.example.stepperbackend.domain.ExerciseStep;
import com.example.stepperbackend.repository.ExerciseStepRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;


@Service
@RequiredArgsConstructor
public class ExerciseStepServiceImpl implements ExerciseStepService{

private final ExerciseStepRepository exerciseStepRepository;


@Override
public void modifyStep(Long stepId) {
ExerciseStep exerciseStep = exerciseStepRepository.findById(stepId)
.orElseThrow(() -> new ExerciseStepHandler(ErrorStatus.EXERCISE_STEP_ID_NOT_FOUND));

exerciseStep.setStepStatus(true);
exerciseStepRepository.save(exerciseStep);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@


import com.example.stepperbackend.apiPayload.ApiResponse;
import com.example.stepperbackend.converter.ExerciseCardConverter;
import com.example.stepperbackend.domain.ExerciseCard;
import com.example.stepperbackend.domain.enums.BodyPart;
import com.example.stepperbackend.jwt.JWTUtil;
import com.example.stepperbackend.service.exerciseCardService.ExerciseCardService;
Expand All @@ -10,8 +12,10 @@
import jakarta.servlet.http.HttpServletRequest;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDate;
import java.util.List;

@Slf4j
Expand Down Expand Up @@ -53,6 +57,15 @@ public ApiResponse<List<ExerciseCardDto.ExerciseCardStatusResponseDto>> getExerc
return ApiResponse.onSuccess(response);
}

@Operation(summary = "오늘의 운동 진행상태 조회 API", description = "오늘의 운동 진행상태 조회")
@GetMapping("/today")
public ApiResponse<List<ExerciseCardDto.ToDayExerciseResponseDto>> getToDayExercise(@RequestParam("date") LocalDate date) {
String memberId = SecurityContextHolder.getContext().getAuthentication().getName();

List<ExerciseCardDto.ToDayExerciseResponseDto> response = exerciseCardService.getTodayExercises(date, memberId);
return ApiResponse.onSuccess(response);
}

@Operation(summary = "운동 부위에 따른 작성된 카드 날짜 반환 API", description = "운동 부위의 운동 카드 요일 조회")
@GetMapping("/check-date")
public ApiResponse<List<ExerciseCardDto.ExerciseCardWeekResponseDto>> getExerciseCardWeek(@RequestParam("bodyPart") String bodyPartStr, HttpServletRequest request) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.example.stepperbackend.apiPayload.ApiResponse;
import com.example.stepperbackend.domain.MyExercise;
import com.example.stepperbackend.domain.enums.BodyPart;
import com.example.stepperbackend.service.MyExerciseService.MyExerciseService;
import com.example.stepperbackend.converter.MyExerciseConverter;
import com.example.stepperbackend.web.dto.MyExerciseDto;
Expand Down Expand Up @@ -32,7 +33,7 @@ public ApiResponse<MyExerciseDto.AddExerciseResponseDTO> Add(@RequestBody @Valid

@GetMapping("/check")
@Operation(summary = "나만의 운동 조회 API", description = "나만의 운동 조회")
public ApiResponse<List<MyExerciseDto.CheckExerciseResponseDTO>> check(@RequestBody @Valid MyExerciseDto.CheckExerciseRequestDto request) {
public ApiResponse<List<MyExerciseDto.CheckExerciseResponseDTO>> check(@RequestParam @Valid BodyPart request) {
String memberId = SecurityContextHolder.getContext().getAuthentication().getName();

List<MyExercise> myExercise = myExerciseService.checkMyExercise(request, memberId);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.example.stepperbackend.web.controller;

import com.example.stepperbackend.apiPayload.ApiResponse;
import com.example.stepperbackend.service.exerciseStep.ExerciseStepService;
import io.swagger.v3.oas.annotations.Operation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

@RestController
@RequiredArgsConstructor
@RequestMapping("/api/exerciseStep")
public class StepController {

private final ExerciseStepService exerciseStepService;

@Operation(summary = "운동카드 단계별 상태 수정 API", description = "단계별 상태 수정")
@PostMapping("/step")
public ApiResponse<Void> modify(@RequestParam Long stepId) {

exerciseStepService.modifyStep(stepId);
return ApiResponse.onSuccess(null);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,8 @@ public static class ExerciseCardResponseDto {
private int second;
private String materials;
private BodyPart bodyPart;
private List<ExerciseStepDto.ExerciseStepResponseDto> setpList;

private List<ExerciseStepDto.ExerciseStepResponseDto> stepList;
}

@Builder
Expand All @@ -51,6 +52,22 @@ public static class ExerciseCardStatusResponseDto {
private boolean status;
}

@Getter
public static class ToDayExerciseRequestDto{
private LocalDate date;
}

@Builder
@Getter
@NoArgsConstructor
@AllArgsConstructor
public static class ToDayExerciseResponseDto {
private Long id;
private BodyPart bodyPart;

private List<ExerciseStepDto.ExerciseStepResponseDto> stepList;
}

@Data
public static class ExerciseCardWeekRequestDto {
private String bodyPart;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,9 @@ public static class ExerciseStepRequestDto {
@NoArgsConstructor
@AllArgsConstructor
public static class ExerciseStepResponseDto {
private Long stepId;
private int step;
private boolean step_status;
private MyExerciseDto.CheckExerciseResponseDTO myExercise;
}
}

0 comments on commit 3181ccd

Please sign in to comment.