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 07d048e..74c291e 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,40 @@ 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 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 @Service public class UserService { private final UserRepository userRepository; + + + 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(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 0edecb8..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 @@ -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; @@ -9,4 +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/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..68d3484 100644 --- a/src/main/java/com/sequence/anonymous/user/presentation/UserController.java +++ b/src/main/java/com/sequence/anonymous/user/presentation/UserController.java @@ -1,14 +1,58 @@ 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.InitializeRequest; +import com.sequence.anonymous.user.dto.UserResponse; +import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.http.ResponseEntity; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.web.bind.annotation.*; + +@Transactional @RequiredArgsConstructor @RestController @RequestMapping("/users") public class UserController { private final UserService userService; + + @GetMapping("/me") + public ResponseEntity findMyInfo(@AuthenticationPrincipal CustomOAuth2User user){ + Long currentUserId = user.getId(); + User currentUser = userService.findById(currentUserId); + + return ResponseEntity.ok(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(new UserResponse(user)); + } + + else if (name != null) { + User user = userService.findByName(name); + return ResponseEntity.ok(new UserResponse(user)); + } + + else { + throw new IllegalArgumentException("Unexpected user"); + } + } + + + + @PostMapping("/profiles") + public void initializeProfile(@RequestBody InitializeRequest initializeRequest, @AuthenticationPrincipal CustomOAuth2User user) { + userService.initializeProfile(user.getId(), initializeRequest); + } + }