From 2a50039dc0a607a65ceb458d3714cd3deff1a530 Mon Sep 17 00:00:00 2001 From: tjdals4716 Date: Mon, 5 Aug 2024 21:27:00 +0900 Subject: [PATCH] =?UTF-8?q?:white=5Fcheck=5Fmark:=20=ED=8C=94=EB=A1=9C?= =?UTF-8?q?=EC=9A=B0=20=EC=9A=94=EC=B2=AD=20DTO=20=EB=B3=80=ED=99=98=20?= =?UTF-8?q?=EB=B0=8F=20=EB=B0=98=ED=99=98,=20=ED=86=A0=ED=81=B0=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Follow/Controller/FollowController.java | 13 +++++++-- .../Follow/DTO/FollowRequestDTO.java | 28 +++++++++++++++++++ .../Follow/Entity/FollowRequest.java | 2 ++ .../Follow/Service/FollowService.java | 12 ++++++-- 4 files changed, 49 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/example/MangoWafflee/Follow/Controller/FollowController.java b/src/main/java/com/example/MangoWafflee/Follow/Controller/FollowController.java index 678715b..7ecb21c 100644 --- a/src/main/java/com/example/MangoWafflee/Follow/Controller/FollowController.java +++ b/src/main/java/com/example/MangoWafflee/Follow/Controller/FollowController.java @@ -10,7 +10,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.security.core.userdetails.UserDetails; import org.springframework.web.bind.annotation.*; +import org.springframework.security.core.annotation.AuthenticationPrincipal; + import java.util.List; @@ -27,10 +30,14 @@ public class FollowController { private FollowRequestRepository followRequestRepository; @PostMapping("/request") - public ResponseEntity sendFollowRequest(@RequestBody FollowRequestDTO followRequestDTO) { + public ResponseEntity sendFollowRequest(@RequestBody FollowRequestDTO followRequestDTO, @AuthenticationPrincipal UserDetails userDetails) { try { - FollowRequest request = followService.sendFollowRequest(followRequestDTO.getSenderId(), followRequestDTO.getReceiverId()); - return ResponseEntity.ok(request); + //DTO에서 수신인 정보를 추출하고 인증된 사용자 정보를 추출 + FollowRequest request = followService.sendFollowRequest(followRequestDTO.getReceiverId(), userDetails); + //생성된 엔티티를 DTO 클래스 entityToDto 메서드로 DTO 변환 + FollowRequestDTO responseDTO = FollowRequestDTO.entityToDto(request); + //변환된 DTO 값 반환 + return ResponseEntity.ok(responseDTO); } catch (IllegalArgumentException e) { return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(e.getMessage()); } catch (RuntimeException e) { diff --git a/src/main/java/com/example/MangoWafflee/Follow/DTO/FollowRequestDTO.java b/src/main/java/com/example/MangoWafflee/Follow/DTO/FollowRequestDTO.java index 44b6331..24fa599 100644 --- a/src/main/java/com/example/MangoWafflee/Follow/DTO/FollowRequestDTO.java +++ b/src/main/java/com/example/MangoWafflee/Follow/DTO/FollowRequestDTO.java @@ -1,9 +1,37 @@ package com.example.MangoWafflee.Follow.DTO; +import com.example.MangoWafflee.DTO.UserDTO; +import com.example.MangoWafflee.Entity.UserEntity; +import com.example.MangoWafflee.Follow.Entity.FollowRequest; +import com.example.MangoWafflee.Follow.Entity.FollowRequestStatus; +import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; @Data +@NoArgsConstructor +@AllArgsConstructor public class FollowRequestDTO { + private Long id; private Long senderId; private Long receiverId; + private FollowRequestStatus status; + private LocalDateTime requestDate; + + //엔티티를 직접 반환하게 하지않고 필요한 데이터만 포함한 객체를 반환하도록 DTO를 사용 + public static FollowRequestDTO entityToDto(FollowRequest followRequest) { + return new FollowRequestDTO( + followRequest.getId(), + followRequest.getSender().getId(), + followRequest.getReceiver().getId(), + followRequest.getStatus(), + followRequest.getRequestDate() + ); + } + + public FollowRequest dtoToEntity(UserEntity sender, UserEntity receiver) { + return new FollowRequest(id, sender, receiver, status, requestDate); + } } diff --git a/src/main/java/com/example/MangoWafflee/Follow/Entity/FollowRequest.java b/src/main/java/com/example/MangoWafflee/Follow/Entity/FollowRequest.java index 33677de..7e03be8 100644 --- a/src/main/java/com/example/MangoWafflee/Follow/Entity/FollowRequest.java +++ b/src/main/java/com/example/MangoWafflee/Follow/Entity/FollowRequest.java @@ -4,9 +4,11 @@ import jakarta.persistence.*; import lombok.Data; import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; import java.time.LocalDateTime; +@AllArgsConstructor @NoArgsConstructor @Data @Entity diff --git a/src/main/java/com/example/MangoWafflee/Follow/Service/FollowService.java b/src/main/java/com/example/MangoWafflee/Follow/Service/FollowService.java index 4ae9aa2..7c5e8f8 100644 --- a/src/main/java/com/example/MangoWafflee/Follow/Service/FollowService.java +++ b/src/main/java/com/example/MangoWafflee/Follow/Service/FollowService.java @@ -10,6 +10,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.security.core.userdetails.UserDetails; import org.springframework.stereotype.Service; import java.time.LocalDateTime; @@ -28,7 +29,12 @@ public class FollowService { @Autowired private UserRepository userRepository; - public FollowRequest sendFollowRequest(Long senderId, Long receiverId) { // 팔로우 요청 + public FollowRequest sendFollowRequest(Long receiverId, UserDetails userDetails) { + //UserDetails에서 UserEntity로 끌고옴 + UserEntity sender = (UserEntity) userDetails; + //인증된 사용자 정보 추출 + Long senderId = sender.getId(); + if (senderId.equals(receiverId)) { throw new IllegalArgumentException("자기 자신에게 팔로우 요청을 보낼 수 없습니다."); } @@ -39,8 +45,8 @@ public FollowRequest sendFollowRequest(Long senderId, Long receiverId) { // 팔 throw new RuntimeException("이 분은 당신의 친구입니다..."); } - UserEntity sender = userRepository.findById(senderId).orElseThrow(() -> new RuntimeException("Sender not found")); - UserEntity receiver = userRepository.findById(receiverId).orElseThrow(() -> new RuntimeException("Receiver not found")); + UserEntity receiver = userRepository.findById(receiverId) + .orElseThrow(() -> new RuntimeException("Receiver not found")); FollowRequest request = new FollowRequest(); request.setSender(sender);