From 659747fad89450f1081073e2a36d5f69262f6d6e Mon Sep 17 00:00:00 2001 From: eunseob Date: Thu, 5 Oct 2023 19:56:02 +0900 Subject: [PATCH 1/4] =?UTF-8?q?feat:=20=EC=9C=A0=EC=A0=80=20=EA=B2=80?= =?UTF-8?q?=EC=83=89,=20=EB=82=B4=20=EC=A0=95=EB=B3=B4=20=EA=B0=80?= =?UTF-8?q?=EC=A0=B8=EC=98=A4=EA=B8=B0=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../user/application/UserService.java | 21 ++++++++++ .../domain/repository/UserRepository.java | 3 ++ .../anonymous/user/dto/UserResponse.java | 35 +++++++++++++++++ .../user/presentation/UserController.java | 38 ++++++++++++++++++- 4 files changed, 95 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/sequence/anonymous/user/dto/UserResponse.java diff --git a/src/main/java/com/sequence/anonymous/user/application/UserService.java b/src/main/java/com/sequence/anonymous/user/application/UserService.java index 07d048e..24b54a3 100644 --- a/src/main/java/com/sequence/anonymous/user/application/UserService.java +++ b/src/main/java/com/sequence/anonymous/user/application/UserService.java @@ -1,12 +1,33 @@ package com.sequence.anonymous.user.application; import com.sequence.anonymous.user.domain.repository.UserRepository; +import com.sequence.anonymous.user.domain.user.Gender; +import com.sequence.anonymous.user.domain.user.User; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.List; + @RequiredArgsConstructor @Service public class UserService { private final UserRepository userRepository; + + public List findMyInfo(){ + return userRepository.findAll(); + } + + public User findById(Long userId) { + return userRepository.findById(userId) + .orElseThrow(() -> new IllegalArgumentException("not found : " + userId)); + } + + public User findByName(String userName) { + return userRepository.findByName(userName) + .orElseThrow(() -> new IllegalArgumentException("not found : " + userName)); + } + + public void initializeProfile(String name, Integer age, Gender gender){ + } } diff --git a/src/main/java/com/sequence/anonymous/user/domain/repository/UserRepository.java b/src/main/java/com/sequence/anonymous/user/domain/repository/UserRepository.java index 0edecb8..f83f783 100644 --- a/src/main/java/com/sequence/anonymous/user/domain/repository/UserRepository.java +++ b/src/main/java/com/sequence/anonymous/user/domain/repository/UserRepository.java @@ -9,4 +9,7 @@ public interface UserRepository extends JpaRepository { Optional findByEmailAndProviderId(String email, String providerId); + + Optional findByName(String name); + } diff --git a/src/main/java/com/sequence/anonymous/user/dto/UserResponse.java b/src/main/java/com/sequence/anonymous/user/dto/UserResponse.java new file mode 100644 index 0000000..c99c284 --- /dev/null +++ b/src/main/java/com/sequence/anonymous/user/dto/UserResponse.java @@ -0,0 +1,35 @@ +package com.sequence.anonymous.user.dto; + +import com.sequence.anonymous.user.domain.user.Gender; +import com.sequence.anonymous.user.domain.user.OAuth2Provider; +import com.sequence.anonymous.user.domain.user.Role; +import com.sequence.anonymous.user.domain.user.User; +import lombok.Getter; + + +@Getter + +public class UserResponse { + + private final Long id; + private final String providerId; + private final OAuth2Provider provider; + private final String name; + private final Integer age; + private final Gender gender; + private final String email; + private final Role role; + private final Boolean withdrawal; + + public UserResponse(User user){ + this.id = user.getId(); + this.providerId = user.getProviderId(); + this.provider = user.getProvider(); + this.name = user.getName(); + this.age = user.getAge(); + this.gender = user.getGender(); + this.email = user.getEmail(); + this.role = user.getRole(); + this.withdrawal = user.getWithdrawal(); + } +} diff --git a/src/main/java/com/sequence/anonymous/user/presentation/UserController.java b/src/main/java/com/sequence/anonymous/user/presentation/UserController.java index 4b8c437..c091bcf 100644 --- a/src/main/java/com/sequence/anonymous/user/presentation/UserController.java +++ b/src/main/java/com/sequence/anonymous/user/presentation/UserController.java @@ -1,9 +1,15 @@ package com.sequence.anonymous.user.presentation; import com.sequence.anonymous.user.application.UserService; +import com.sequence.anonymous.user.domain.user.Gender; +import com.sequence.anonymous.user.domain.user.User; +import com.sequence.anonymous.user.dto.UserResponse; import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.List; @RequiredArgsConstructor @RestController @@ -11,4 +17,32 @@ public class UserController { private final UserService userService; + + @GetMapping("/me") + public ResponseEntity findMyInfo(){ + List user = userService.findMyInfo(); + return ResponseEntity.ok() + .body(new UserResponse((User) user)); + } + + @GetMapping("/{id}") + public ResponseEntity findUserById(@PathVariable Long id){ + User user = userService.findById(id); + return ResponseEntity.ok() + .body(new UserResponse(user)); + } + @GetMapping("/{name}") + public ResponseEntity findUserByName(@PathVariable String name){ + User user = userService.findByName(name); + return ResponseEntity.ok() + .body(new UserResponse(user)); + } + + @PostMapping("/profiles") + public ResponseEntity> initializeProfile(String name, Integer age, Gender gender) { + User user = userService.initializeProfile(name, age, gender); + return ResponseEntity.status(HttpStatus.CREATED) + .body((List) user); + } + } From 56f1a5a13e8e6379a38c52e95d059eb91ff02b48 Mon Sep 17 00:00:00 2001 From: eunseob Date: Thu, 5 Oct 2023 22:10:58 +0900 Subject: [PATCH 2/4] =?UTF-8?q?fix:=20=EC=95=84=EC=9D=B4=EB=94=94,=20?= =?UTF-8?q?=EC=9D=B4=EB=A6=84=EC=9C=BC=EB=A1=9C=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=EC=9E=90=20=EA=B2=80=EC=83=89=EC=97=90=EC=84=9C=20=EB=A7=A4?= =?UTF-8?q?=ED=95=91=20=EC=B6=A9=EB=8F=8C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../user/presentation/UserController.java | 40 ++++++++++++++----- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/sequence/anonymous/user/presentation/UserController.java b/src/main/java/com/sequence/anonymous/user/presentation/UserController.java index c091bcf..d14e28b 100644 --- a/src/main/java/com/sequence/anonymous/user/presentation/UserController.java +++ b/src/main/java/com/sequence/anonymous/user/presentation/UserController.java @@ -9,6 +9,7 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import java.security.Principal; import java.util.List; @RequiredArgsConstructor @@ -19,13 +20,35 @@ public class UserController { private final UserService userService; @GetMapping("/me") - public ResponseEntity findMyInfo(){ - List user = userService.findMyInfo(); + public ResponseEntity findMyInfo(Principal principal){ + List currentUser = userService.findMyInfo(); + return ResponseEntity.ok() - .body(new UserResponse((User) user)); + .body(new UserResponse((User) currentUser)); + } + + @GetMapping + public ResponseEntity findUser(@RequestParam(name = "id", required = false) Long id, + @RequestParam(name = "name", required = false) String name) { + if (id != null) { + User user = userService.findById(id); + return ResponseEntity.ok() + .body(new UserResponse(user)); + } + + else if (name != null) { + User user = userService.findByName(name); + return ResponseEntity.ok() + .body(new UserResponse(user)); + } + + else { + throw new IllegalArgumentException("Unexpected user"); + } } - @GetMapping("/{id}") + + /*@GetMapping("/{id}") public ResponseEntity findUserById(@PathVariable Long id){ User user = userService.findById(id); return ResponseEntity.ok() @@ -36,13 +59,12 @@ public ResponseEntity findUserByName(@PathVariable String name){ User user = userService.findByName(name); return ResponseEntity.ok() .body(new UserResponse(user)); - } + }*/ @PostMapping("/profiles") - public ResponseEntity> initializeProfile(String name, Integer age, Gender gender) { - User user = userService.initializeProfile(name, age, gender); - return ResponseEntity.status(HttpStatus.CREATED) - .body((List) user); + public void initializeProfile(String name, Integer age, Gender gender) { + Long currentUserId = 1L; + } } From fd3c27c729439b99bc0c30001eb436d183d0bb31 Mon Sep 17 00:00:00 2001 From: eunseob Date: Mon, 9 Oct 2023 16:33:46 +0900 Subject: [PATCH 3/4] =?UTF-8?q?feat:=20=ED=9A=8C=EC=9B=90=EC=A0=95?= =?UTF-8?q?=EB=B3=B4=20=EC=B4=88=EA=B8=B0=ED=99=94=20=EA=B5=AC=ED=98=84,?= =?UTF-8?q?=20fix:=20=EB=82=B4=20=EC=A0=95=EB=B3=B4=20=EB=B6=88=EB=9F=AC?= =?UTF-8?q?=EC=98=A4=EA=B8=B0=20=EC=8A=A4=ED=94=84=EB=A7=81=20=EC=8B=9C?= =?UTF-8?q?=ED=81=90=EB=A6=AC=ED=8B=B0=20=EC=9D=B4=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../anonymous/security/CustomOAuth2User.java | 6 +++ .../user/application/UserService.java | 10 ++--- .../domain/repository/UserRepository.java | 1 + .../user/presentation/UserController.java | 41 +++++++------------ 4 files changed, 25 insertions(+), 33 deletions(-) diff --git a/src/main/java/com/sequence/anonymous/security/CustomOAuth2User.java b/src/main/java/com/sequence/anonymous/security/CustomOAuth2User.java index e715a95..ea7af29 100644 --- a/src/main/java/com/sequence/anonymous/security/CustomOAuth2User.java +++ b/src/main/java/com/sequence/anonymous/security/CustomOAuth2User.java @@ -6,11 +6,15 @@ import java.util.Collection; import java.util.Map; import java.util.Objects; + +import lombok.Getter; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.oauth2.core.user.OAuth2User; +@Getter + public class CustomOAuth2User implements OAuth2User, Serializable { private final Long id; @@ -70,4 +74,6 @@ public String toString() { .append("[OAuth2UserInfo]") .toString(); } + + } diff --git a/src/main/java/com/sequence/anonymous/user/application/UserService.java b/src/main/java/com/sequence/anonymous/user/application/UserService.java index 24b54a3..4ccdfb8 100644 --- a/src/main/java/com/sequence/anonymous/user/application/UserService.java +++ b/src/main/java/com/sequence/anonymous/user/application/UserService.java @@ -1,12 +1,14 @@ package com.sequence.anonymous.user.application; +import com.sequence.anonymous.security.CustomOAuth2User; import com.sequence.anonymous.user.domain.repository.UserRepository; import com.sequence.anonymous.user.domain.user.Gender; import com.sequence.anonymous.user.domain.user.User; import lombok.RequiredArgsConstructor; +import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.stereotype.Service; -import java.util.List; +import java.util.Optional; @RequiredArgsConstructor @Service @@ -14,9 +16,6 @@ public class UserService { private final UserRepository userRepository; - public List findMyInfo(){ - return userRepository.findAll(); - } public User findById(Long userId) { return userRepository.findById(userId) @@ -28,6 +27,5 @@ public User findByName(String userName) { .orElseThrow(() -> new IllegalArgumentException("not found : " + userName)); } - public void initializeProfile(String name, Integer age, Gender gender){ - } + } diff --git a/src/main/java/com/sequence/anonymous/user/domain/repository/UserRepository.java b/src/main/java/com/sequence/anonymous/user/domain/repository/UserRepository.java index f83f783..8a6e7f0 100644 --- a/src/main/java/com/sequence/anonymous/user/domain/repository/UserRepository.java +++ b/src/main/java/com/sequence/anonymous/user/domain/repository/UserRepository.java @@ -1,6 +1,7 @@ package com.sequence.anonymous.user.domain.repository; import com.sequence.anonymous.user.domain.user.User; + import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; diff --git a/src/main/java/com/sequence/anonymous/user/presentation/UserController.java b/src/main/java/com/sequence/anonymous/user/presentation/UserController.java index d14e28b..72de985 100644 --- a/src/main/java/com/sequence/anonymous/user/presentation/UserController.java +++ b/src/main/java/com/sequence/anonymous/user/presentation/UserController.java @@ -1,17 +1,18 @@ package com.sequence.anonymous.user.presentation; +import com.sequence.anonymous.security.CustomOAuth2User; import com.sequence.anonymous.user.application.UserService; import com.sequence.anonymous.user.domain.user.Gender; import com.sequence.anonymous.user.domain.user.User; import com.sequence.anonymous.user.dto.UserResponse; +import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; -import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; +import org.springframework.security.core.annotation.AuthenticationPrincipal; -import java.security.Principal; -import java.util.List; +import org.springframework.web.bind.annotation.*; +@Transactional @RequiredArgsConstructor @RestController @RequestMapping("/users") @@ -20,11 +21,12 @@ public class UserController { private final UserService userService; @GetMapping("/me") - public ResponseEntity findMyInfo(Principal principal){ - List currentUser = userService.findMyInfo(); + public ResponseEntity findMyInfo(@AuthenticationPrincipal CustomOAuth2User user){ + Long currentUserId = user.getId(); + User currentUser = userService.findById(currentUserId); + + return ResponseEntity.ok(new UserResponse((User) currentUser)); - return ResponseEntity.ok() - .body(new UserResponse((User) currentUser)); } @GetMapping @@ -32,14 +34,12 @@ public ResponseEntity findUser(@RequestParam(name = "id", required @RequestParam(name = "name", required = false) String name) { if (id != null) { User user = userService.findById(id); - return ResponseEntity.ok() - .body(new UserResponse(user)); + return ResponseEntity.ok(new UserResponse(user)); } else if (name != null) { User user = userService.findByName(name); - return ResponseEntity.ok() - .body(new UserResponse(user)); + return ResponseEntity.ok(new UserResponse(user)); } else { @@ -48,23 +48,10 @@ else if (name != null) { } - /*@GetMapping("/{id}") - public ResponseEntity findUserById(@PathVariable Long id){ - User user = userService.findById(id); - return ResponseEntity.ok() - .body(new UserResponse(user)); - } - @GetMapping("/{name}") - public ResponseEntity findUserByName(@PathVariable String name){ - User user = userService.findByName(name); - return ResponseEntity.ok() - .body(new UserResponse(user)); - }*/ @PostMapping("/profiles") - public void initializeProfile(String name, Integer age, Gender gender) { - Long currentUserId = 1L; - + public void initializeProfile(User user, String name, Integer age, Gender gender) { + user.initializeProfile(name, age, gender); } } From 72e82a0dae43448741f26b490b800d603393723f Mon Sep 17 00:00:00 2001 From: eunseob Date: Thu, 12 Oct 2023 19:03:40 +0900 Subject: [PATCH 4/4] =?UTF-8?q?feat:=20=ED=9A=8C=EC=9B=90=EC=A0=95?= =?UTF-8?q?=EB=B3=B4=20=EC=B4=88=EA=B8=B0=ED=99=94=20dto,=20service=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../anonymous/user/application/UserService.java | 9 +++++++++ .../user/domain/repository/UserRepository.java | 2 +- .../anonymous/user/dto/InitializeRequest.java | 14 ++++++++++++++ .../user/presentation/UserController.java | 5 +++-- 4 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/sequence/anonymous/user/dto/InitializeRequest.java diff --git a/src/main/java/com/sequence/anonymous/user/application/UserService.java b/src/main/java/com/sequence/anonymous/user/application/UserService.java index 4ccdfb8..74c291e 100644 --- a/src/main/java/com/sequence/anonymous/user/application/UserService.java +++ b/src/main/java/com/sequence/anonymous/user/application/UserService.java @@ -4,10 +4,12 @@ import com.sequence.anonymous.user.domain.repository.UserRepository; import com.sequence.anonymous.user.domain.user.Gender; import com.sequence.anonymous.user.domain.user.User; +import com.sequence.anonymous.user.dto.InitializeRequest; import lombok.RequiredArgsConstructor; import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.stereotype.Service; +import java.util.List; import java.util.Optional; @RequiredArgsConstructor @@ -27,5 +29,12 @@ public User findByName(String userName) { .orElseThrow(() -> new IllegalArgumentException("not found : " + userName)); } + public void initializeProfile(Long userId, InitializeRequest initializeRequest){ + + + User user = userRepository.findById(userId).orElseThrow(() -> new IllegalArgumentException("not found : " + userId)); + user.initializeProfile(initializeRequest.getName(), initializeRequest.getAge(), initializeRequest.getGender()); + } + } diff --git a/src/main/java/com/sequence/anonymous/user/domain/repository/UserRepository.java b/src/main/java/com/sequence/anonymous/user/domain/repository/UserRepository.java index 8a6e7f0..8a2f888 100644 --- a/src/main/java/com/sequence/anonymous/user/domain/repository/UserRepository.java +++ b/src/main/java/com/sequence/anonymous/user/domain/repository/UserRepository.java @@ -10,7 +10,7 @@ public interface UserRepository extends JpaRepository { Optional findByEmailAndProviderId(String email, String providerId); - Optional findByName(String name); + } diff --git a/src/main/java/com/sequence/anonymous/user/dto/InitializeRequest.java b/src/main/java/com/sequence/anonymous/user/dto/InitializeRequest.java new file mode 100644 index 0000000..e78571e --- /dev/null +++ b/src/main/java/com/sequence/anonymous/user/dto/InitializeRequest.java @@ -0,0 +1,14 @@ +package com.sequence.anonymous.user.dto; + +import com.sequence.anonymous.user.domain.user.Gender; +import com.sequence.anonymous.user.domain.user.User; +import lombok.Getter; + +@Getter +public class InitializeRequest { + private String name; + private Integer age; + private Gender gender; + + +} diff --git a/src/main/java/com/sequence/anonymous/user/presentation/UserController.java b/src/main/java/com/sequence/anonymous/user/presentation/UserController.java index 72de985..68d3484 100644 --- a/src/main/java/com/sequence/anonymous/user/presentation/UserController.java +++ b/src/main/java/com/sequence/anonymous/user/presentation/UserController.java @@ -4,6 +4,7 @@ import com.sequence.anonymous.user.application.UserService; import com.sequence.anonymous.user.domain.user.Gender; import com.sequence.anonymous.user.domain.user.User; +import com.sequence.anonymous.user.dto.InitializeRequest; import com.sequence.anonymous.user.dto.UserResponse; import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; @@ -50,8 +51,8 @@ else if (name != null) { @PostMapping("/profiles") - public void initializeProfile(User user, String name, Integer age, Gender gender) { - user.initializeProfile(name, age, gender); + public void initializeProfile(@RequestBody InitializeRequest initializeRequest, @AuthenticationPrincipal CustomOAuth2User user) { + userService.initializeProfile(user.getId(), initializeRequest); } }