From 41f2c97b5fcb2c7861f2d233991f4288070ddb6f Mon Sep 17 00:00:00 2001 From: tkdwns414 Date: Mon, 8 Jan 2024 00:36:50 +0900 Subject: [PATCH 1/2] [feat] create current User info API --- .../controller/UserController.java | 24 +++++++++++++++++++ .../dto/response/UserInfoResponse.java | 10 ++++++++ .../pingleserver/service/UserService.java | 13 ++++++++++ 3 files changed, 47 insertions(+) create mode 100644 src/main/java/org/pingle/pingleserver/controller/UserController.java create mode 100644 src/main/java/org/pingle/pingleserver/dto/response/UserInfoResponse.java diff --git a/src/main/java/org/pingle/pingleserver/controller/UserController.java b/src/main/java/org/pingle/pingleserver/controller/UserController.java new file mode 100644 index 0000000..5df0c5e --- /dev/null +++ b/src/main/java/org/pingle/pingleserver/controller/UserController.java @@ -0,0 +1,24 @@ +package org.pingle.pingleserver.controller; + +import lombok.RequiredArgsConstructor; +import org.pingle.pingleserver.annotation.UserId; +import org.pingle.pingleserver.dto.common.ApiResponse; +import org.pingle.pingleserver.dto.response.UserInfoResponse; +import org.pingle.pingleserver.dto.type.SuccessMessage; +import org.pingle.pingleserver.service.UserService; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/v1/users") +@RequiredArgsConstructor +public class UserController { + + private final UserService userService; + + @GetMapping("/me") + public ApiResponse getLoginUserInfo(@UserId Long userId){ + return ApiResponse.success(SuccessMessage.OK, userService.getUserInfo(userId)); + } +} diff --git a/src/main/java/org/pingle/pingleserver/dto/response/UserInfoResponse.java b/src/main/java/org/pingle/pingleserver/dto/response/UserInfoResponse.java new file mode 100644 index 0000000..c833eda --- /dev/null +++ b/src/main/java/org/pingle/pingleserver/dto/response/UserInfoResponse.java @@ -0,0 +1,10 @@ +package org.pingle.pingleserver.dto.response; + +import org.pingle.pingleserver.domain.User; +import org.pingle.pingleserver.domain.enums.Provider; + +public record UserInfoResponse(Long id, String name, String email, Provider provider){ + public static UserInfoResponse of(User user){ + return new UserInfoResponse(user.getId(), user.getName(), user.getEmail(), user.getProvider()); + } +} diff --git a/src/main/java/org/pingle/pingleserver/service/UserService.java b/src/main/java/org/pingle/pingleserver/service/UserService.java index ef42597..1431efc 100644 --- a/src/main/java/org/pingle/pingleserver/service/UserService.java +++ b/src/main/java/org/pingle/pingleserver/service/UserService.java @@ -1,6 +1,11 @@ package org.pingle.pingleserver.service; import lombok.RequiredArgsConstructor; +import org.pingle.pingleserver.domain.User; +import org.pingle.pingleserver.dto.response.UserInfoResponse; +import org.pingle.pingleserver.dto.type.ErrorMessage; +import org.pingle.pingleserver.exception.BusinessException; +import org.pingle.pingleserver.repository.UserRepository; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -8,4 +13,12 @@ @RequiredArgsConstructor @Transactional(readOnly = true) public class UserService { + + private final UserRepository userRepository; + + public UserInfoResponse getUserInfo(Long userId) { + User user = userRepository.findById(userId).orElseThrow( + () -> new BusinessException(ErrorMessage.USER_NOT_FOUND_ERROR)); + return UserInfoResponse.of(user); + } } From 41582926f63ce0b93e6721190dd9dac61ba794a6 Mon Sep 17 00:00:00 2001 From: tkdwns414 Date: Mon, 8 Jan 2024 00:42:19 +0900 Subject: [PATCH 2/2] [feat] create user leave API --- .../pingle/pingleserver/controller/UserController.java | 7 +++++++ .../pingle/pingleserver/repository/UserRepository.java | 2 ++ .../org/pingle/pingleserver/service/UserService.java | 9 ++++++++- 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/pingle/pingleserver/controller/UserController.java b/src/main/java/org/pingle/pingleserver/controller/UserController.java index 5df0c5e..302ef19 100644 --- a/src/main/java/org/pingle/pingleserver/controller/UserController.java +++ b/src/main/java/org/pingle/pingleserver/controller/UserController.java @@ -6,6 +6,7 @@ import org.pingle.pingleserver.dto.response.UserInfoResponse; import org.pingle.pingleserver.dto.type.SuccessMessage; import org.pingle.pingleserver.service.UserService; +import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -21,4 +22,10 @@ public class UserController { public ApiResponse getLoginUserInfo(@UserId Long userId){ return ApiResponse.success(SuccessMessage.OK, userService.getUserInfo(userId)); } + + @DeleteMapping("/leave") + public ApiResponse leave(@UserId Long userId){ + userService.leave(userId); + return ApiResponse.success(SuccessMessage.OK); + } } diff --git a/src/main/java/org/pingle/pingleserver/repository/UserRepository.java b/src/main/java/org/pingle/pingleserver/repository/UserRepository.java index a8a6976..594e7e5 100644 --- a/src/main/java/org/pingle/pingleserver/repository/UserRepository.java +++ b/src/main/java/org/pingle/pingleserver/repository/UserRepository.java @@ -11,4 +11,6 @@ public interface UserRepository extends JpaRepository { boolean existsByProviderAndSerialIdAndIsDeleted(Provider provider, String serialId, Boolean deleted); Optional findByProviderAndSerialIdAndIsDeleted(Provider provider, String serialId, Boolean deleted); + Optional findByIdAndIsDeleted(Long id, Boolean deleted); + } diff --git a/src/main/java/org/pingle/pingleserver/service/UserService.java b/src/main/java/org/pingle/pingleserver/service/UserService.java index 1431efc..12e4fa0 100644 --- a/src/main/java/org/pingle/pingleserver/service/UserService.java +++ b/src/main/java/org/pingle/pingleserver/service/UserService.java @@ -17,8 +17,15 @@ public class UserService { private final UserRepository userRepository; public UserInfoResponse getUserInfo(Long userId) { - User user = userRepository.findById(userId).orElseThrow( + User user = userRepository.findByIdAndIsDeleted(userId, false).orElseThrow( () -> new BusinessException(ErrorMessage.USER_NOT_FOUND_ERROR)); return UserInfoResponse.of(user); } + + @Transactional + public void leave(Long userId) { + User user = userRepository.findByIdAndIsDeleted(userId, false).orElseThrow( + () -> new BusinessException(ErrorMessage.USER_NOT_FOUND_ERROR)); + user.softDelete(); + } }