From 0382666a4c976c14ad2f837fad62a5c9a2c1ee4b Mon Sep 17 00:00:00 2001 From: JungTae Kwon Date: Tue, 24 Sep 2024 19:43:24 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20=EA=B0=80=EB=8A=A5=EC=8B=9C?= =?UTF-8?q?=EA=B0=84=20=EA=B0=B1=EC=8B=A0=20(#158)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/PossibleDateController.java | 15 +++----- .../PossibleDate/PossibleDateRepository.java | 8 ++++ .../service/PossibleDateService.java | 38 ++++++++++++++----- 3 files changed, 41 insertions(+), 20 deletions(-) diff --git a/src/main/java/com/soongsil/CoffeeChat/controller/PossibleDateController.java b/src/main/java/com/soongsil/CoffeeChat/controller/PossibleDateController.java index 5b8bff8..4c1dca9 100644 --- a/src/main/java/com/soongsil/CoffeeChat/controller/PossibleDateController.java +++ b/src/main/java/com/soongsil/CoffeeChat/controller/PossibleDateController.java @@ -10,7 +10,6 @@ import org.springframework.security.core.Authentication; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -40,20 +39,16 @@ private String getUserNameByAuthentication(Authentication authentication) throws return principal.getUsername(); } - @PutMapping() - @Operation(summary = "멘토가 직접 커피챗 가능시간 추가하기") + @PostMapping() + @Operation(summary = "멘토가 직접 커피챗 가능시간 갱신하기") @ApiResponse(responseCode = "201", description = "DTO형식으로 정보 반환") public ResponseEntity>> addPossibleDate( Authentication authentication, @RequestBody List dtos) throws Exception { - String username = getUserNameByAuthentication(authentication); - - List responseDtos = dtos.stream() - .map(dto -> possibleDateService.createPossibleDate(dto, username)) - .collect(Collectors.toList()); - return ResponseEntity.created(URI.create(POSSIBLEDATE_URI)).body( - ApiResponseGenerator.onSuccessCREATED(responseDtos) + ApiResponseGenerator.onSuccessCREATED( + possibleDateService.updatePossibleDate(dtos, getUserNameByAuthentication(authentication)) + ) ); } diff --git a/src/main/java/com/soongsil/CoffeeChat/repository/PossibleDate/PossibleDateRepository.java b/src/main/java/com/soongsil/CoffeeChat/repository/PossibleDate/PossibleDateRepository.java index 286fcff..c086c7e 100644 --- a/src/main/java/com/soongsil/CoffeeChat/repository/PossibleDate/PossibleDateRepository.java +++ b/src/main/java/com/soongsil/CoffeeChat/repository/PossibleDate/PossibleDateRepository.java @@ -3,9 +3,17 @@ import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import com.soongsil.CoffeeChat.entity.Mentor; import com.soongsil.CoffeeChat.entity.PossibleDate; public interface PossibleDateRepository extends JpaRepository, PossibleDateRepositoryCustom { List getPossibleDatesByMentorId(Long mentorId); + + @Modifying + @Query("DELETE FROM PossibleDate pd WHERE pd.mentor = :mentor") + void deleteAllByMentor(@Param("mentor") Mentor mentor); } diff --git a/src/main/java/com/soongsil/CoffeeChat/service/PossibleDateService.java b/src/main/java/com/soongsil/CoffeeChat/service/PossibleDateService.java index b4d3581..58b6cc1 100644 --- a/src/main/java/com/soongsil/CoffeeChat/service/PossibleDateService.java +++ b/src/main/java/com/soongsil/CoffeeChat/service/PossibleDateService.java @@ -16,11 +16,13 @@ import com.soongsil.CoffeeChat.repository.User.UserRepository; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import static com.soongsil.CoffeeChat.controller.exception.enums.UserErrorCode.USER_NOT_FOUND; @Service @RequiredArgsConstructor +@Slf4j @Transactional(readOnly = true) public class PossibleDateService { private final PossibleDateRepository possibleDateRepository; @@ -28,24 +30,40 @@ public class PossibleDateService { private User findUserByUsername(String username){ return userRepository.findByUsername(username) - .orElseThrow(() -> new CustomException( - USER_NOT_FOUND.getHttpStatusCode(), - USER_NOT_FOUND.getErrorMessage()) - ); + .orElseThrow(() -> new CustomException( + USER_NOT_FOUND.getHttpStatusCode(), + USER_NOT_FOUND.getErrorMessage()) + ); } @Transactional - public PossibleDateCreateGetResponseDto createPossibleDate(PossibleDateCreateRequestDto dto, + public List updatePossibleDate(List dtos, String username) { + User user = findUserByUsername(username); Mentor mentor = user.getMentor(); - PossibleDate possibleDate = PossibleDate.from(dto); - possibleDate.setMentor(mentor); - mentor.addPossibleDate(possibleDate); - possibleDateRepository.save(possibleDate); - return PossibleDateCreateGetResponseDto.from(possibleDate); + + // 가능 시간을 갱신하기 위해 모든 가능 시간을 삭제 후 새로운 값 삽입 + possibleDateRepository.deleteAllByMentor(mentor); + log.info("[*] 멘토(" + username + ")의 가능시간 모두 삭제(가능시간 갱신 API 일부)"); + + List possibleDates = dtos.stream() + .map(dto -> { + PossibleDate possibleDate = PossibleDate.from(dto); + possibleDate.setMentor(mentor); + mentor.addPossibleDate(possibleDate); + return possibleDate; + }) + .collect(Collectors.toList()); + + possibleDateRepository.saveAll(possibleDates); + + return possibleDates.stream() + .map(PossibleDateCreateGetResponseDto::from) + .collect(Collectors.toList()); } + public List findPossibleDateListByMentor(String username) { User user = findUserByUsername(username); Long mentorId = user.getMentor().getId();