From 107d01a4b39dd4e4153b23901646cdad7f79ba34 Mon Sep 17 00:00:00 2001 From: tjdals4716 Date: Tue, 6 Aug 2024 02:03:58 +0900 Subject: [PATCH] =?UTF-8?q?:white=5Fcheck=5Fmark:=20=EC=B1=8C=EB=A6=B0?= =?UTF-8?q?=EC=A7=80=20=ED=86=A0=ED=81=B0=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controller/ChallengeController.java | 6 ++++-- .../MangoWafflee/Service/ChallengeService.java | 3 ++- .../MangoWafflee/Service/ChallengeServiceImpl.java | 14 ++++++++++---- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/example/MangoWafflee/Controller/ChallengeController.java b/src/main/java/com/example/MangoWafflee/Controller/ChallengeController.java index 4b331de..9e5de6c 100644 --- a/src/main/java/com/example/MangoWafflee/Controller/ChallengeController.java +++ b/src/main/java/com/example/MangoWafflee/Controller/ChallengeController.java @@ -5,6 +5,8 @@ import com.example.MangoWafflee.Service.ChallengeService; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.security.core.userdetails.UserDetails; import org.springframework.web.bind.annotation.*; import java.util.List; @@ -45,8 +47,8 @@ public ResponseEntity updateChallengeStatus(@PathVariable Long cha //유저 챌린지 참여 @PostMapping("/userchallenge/participate") - public ResponseEntity participateInChallenge(@RequestBody UserChallengeDTO userChallengeDTO) { - UserChallengeDTO userChallenge = challengeService.participateInChallenge(userChallengeDTO.getUser().getId(), userChallengeDTO.getChallenge().getId(), userChallengeDTO.getParticipating()); + public ResponseEntity participateInChallenge(@RequestBody UserChallengeDTO userChallengeDTO, @AuthenticationPrincipal UserDetails userDetails) { + UserChallengeDTO userChallenge = challengeService.participateInChallenge(userChallengeDTO.getUser().getId(), userChallengeDTO.getChallenge().getId(), userChallengeDTO.getParticipating(), userDetails); return ResponseEntity.ok(userChallenge); } diff --git a/src/main/java/com/example/MangoWafflee/Service/ChallengeService.java b/src/main/java/com/example/MangoWafflee/Service/ChallengeService.java index 4f74e3a..b3251f5 100644 --- a/src/main/java/com/example/MangoWafflee/Service/ChallengeService.java +++ b/src/main/java/com/example/MangoWafflee/Service/ChallengeService.java @@ -4,6 +4,7 @@ import com.example.MangoWafflee.DTO.UserChallengeDTO; import com.example.MangoWafflee.Entity.UserEntity; import com.example.MangoWafflee.Enum.StatusEnum; +import org.springframework.security.core.userdetails.UserDetails; import java.time.LocalDate; import java.util.List; @@ -14,7 +15,7 @@ public interface ChallengeService { List getAllChallenges(); ChallengeDTO getChallengeById(Long challengeId); ChallengeDTO updateChallengeStatus(Long challengeId, StatusEnum status); - UserChallengeDTO participateInChallenge(Long userId, Long challengeId, StatusEnum status); + UserChallengeDTO participateInChallenge(Long userId, Long challengeId, StatusEnum status, UserDetails userDetails); UserChallengeDTO updateUserChallengeStatus(Long userChallengeId, StatusEnum status); void checkAndUpdateChallengeStatus(Long userId); List getUserChallenges(Long userId); diff --git a/src/main/java/com/example/MangoWafflee/Service/ChallengeServiceImpl.java b/src/main/java/com/example/MangoWafflee/Service/ChallengeServiceImpl.java index e828e6e..1d800a9 100644 --- a/src/main/java/com/example/MangoWafflee/Service/ChallengeServiceImpl.java +++ b/src/main/java/com/example/MangoWafflee/Service/ChallengeServiceImpl.java @@ -14,6 +14,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.boot.CommandLineRunner; import org.springframework.context.annotation.Bean; +import org.springframework.security.core.userdetails.UserDetails; import org.springframework.stereotype.Service; import java.time.LocalDate; @@ -130,7 +131,15 @@ public ChallengeDTO updateChallengeStatus(Long challengeId, StatusEnum status) { //유저 챌린지 참여 @Override - public UserChallengeDTO participateInChallenge(Long userId, Long challengeId, StatusEnum status) { + public UserChallengeDTO participateInChallenge(Long userId, Long challengeId, StatusEnum status, UserDetails userDetails) { + if (userDetails == null) { + throw new RuntimeException("인증된 유저가 아닙니다."); + } + + String username = userDetails.getUsername(); + UserEntity user = userRepository.findByUid(username) + .orElseThrow(() -> new RuntimeException("유저의 uid가 " + username + "인 사용자를 찾을 수 없습니다")); + ChallengeEntity challenge = challengeRepository.findById(challengeId) .orElseThrow(() -> new RuntimeException("챌린지 ID가 " + challengeId + "인 챌린지를 찾을 수 없습니다.")); @@ -139,9 +148,6 @@ public UserChallengeDTO participateInChallenge(Long userId, Long challengeId, St throw new RuntimeException("이 챌린지는 진행이 완료되어 더이상 참여할 수 없습니다."); } - UserEntity user = userRepository.findById(userId) - .orElseThrow(() -> new RuntimeException("유저 ID가 " + userId + "인 사용자를 찾을 수 없습니다.")); - //이미 참여 중인 챌린지가 있는지 확인하는 boolean 값 정의 boolean isAlreadyParticipating = userChallengeRepository.findByUserId(userId).stream() .anyMatch(userChallenge -> userChallenge.getChallenge().getId().equals(challengeId));