diff --git a/src/main/java/life/mosu/mosuserver/application/application/ApplicationContext.java b/src/main/java/life/mosu/mosuserver/application/application/ApplicationContext.java index d27684f8..03b731bc 100644 --- a/src/main/java/life/mosu/mosuserver/application/application/ApplicationContext.java +++ b/src/main/java/life/mosu/mosuserver/application/application/ApplicationContext.java @@ -53,7 +53,7 @@ public ApplicationContext fetchPayments(Function, List examApplicationIds = this.examApplications.stream() .map(ExamApplicationJpaEntity::getId).toList(); Map newPaymentMap = fetcher.apply(examApplicationIds).stream() - .filter(payment -> payment.getPaymentStatus() == PaymentStatus.DONE) + .filter(payment -> payment.getPaymentStatus().equals(PaymentStatus.DONE)) .collect(Collectors.toMap( PaymentJpaEntity::getExamApplicationId, Function.identity())); diff --git a/src/main/java/life/mosu/mosuserver/application/application/ApplicationService.java b/src/main/java/life/mosu/mosuserver/application/application/ApplicationService.java index 22359888..42334e2f 100644 --- a/src/main/java/life/mosu/mosuserver/application/application/ApplicationService.java +++ b/src/main/java/life/mosu/mosuserver/application/application/ApplicationService.java @@ -84,5 +84,4 @@ public List getApplications(Long userId) { .fetchPayments(paymentJpaRepository::findByExamApplicationIdIn) .assemble(); } -} - +} \ No newline at end of file diff --git a/src/main/java/life/mosu/mosuserver/application/user/MyUserService.java b/src/main/java/life/mosu/mosuserver/application/user/MyUserService.java index ed982a51..42588f50 100644 --- a/src/main/java/life/mosu/mosuserver/application/user/MyUserService.java +++ b/src/main/java/life/mosu/mosuserver/application/user/MyUserService.java @@ -8,10 +8,13 @@ import life.mosu.mosuserver.global.exception.ErrorCode; import life.mosu.mosuserver.presentation.user.dto.ChangePasswordRequest; import life.mosu.mosuserver.presentation.user.dto.ChangePasswordResponse; +import life.mosu.mosuserver.presentation.user.dto.FindLoginIdRequest; +import life.mosu.mosuserver.presentation.user.dto.FindLoginIdResponse; import life.mosu.mosuserver.presentation.user.dto.FindPasswordRequest; import lombok.RequiredArgsConstructor; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; @Service @@ -31,12 +34,23 @@ public ChangePasswordResponse changePassword(Long userId, ChangePasswordRequest return ChangePasswordResponse.from(Boolean.TRUE); } - @Transactional(readOnly = true) + @Transactional(readOnly = true, propagation = Propagation.SUPPORTS) + public FindLoginIdResponse findLoginId(FindLoginIdRequest request) { + UserJpaEntity user = userJpaRepository.findByNameAndPhoneNumber(request.name(), + request.phoneNumber()) + .orElseThrow(() -> new CustomRuntimeException(ErrorCode.NOT_FOUND_LOGIN_ID)); + + return FindLoginIdResponse.from(user.getLoginId()); + + } + + @Transactional(readOnly = true, propagation = Propagation.SUPPORTS) public void findPassword(Long userId, FindPasswordRequest request) { UserJpaEntity user = userJpaRepository.findById(userId) .orElseThrow(() -> new CustomRuntimeException(ErrorCode.USER_NOT_FOUND)); - if (user.getName() != request.name() || user.getLoginId() != request.loginId()) { + if (!user.getName().equals(request.name()) || !user.getLoginId() + .equals(request.loginId())) { throw new CustomRuntimeException(ErrorCode.USER_INFO_INVALID); } } diff --git a/src/main/java/life/mosu/mosuserver/domain/user/UserJpaRepository.java b/src/main/java/life/mosu/mosuserver/domain/user/UserJpaRepository.java index 7e81de04..975bacad 100644 --- a/src/main/java/life/mosu/mosuserver/domain/user/UserJpaRepository.java +++ b/src/main/java/life/mosu/mosuserver/domain/user/UserJpaRepository.java @@ -1,11 +1,14 @@ package life.mosu.mosuserver.domain.user; -import org.springframework.data.jpa.repository.JpaRepository; - import java.util.Optional; +import org.springframework.data.jpa.repository.JpaRepository; public interface UserJpaRepository extends JpaRepository { + Optional findByLoginId(String loginId); boolean existsByLoginId(String loginId); + + + Optional findByNameAndPhoneNumber(String name, String phoneNumber); } diff --git a/src/main/java/life/mosu/mosuserver/global/exception/ErrorCode.java b/src/main/java/life/mosu/mosuserver/global/exception/ErrorCode.java index e8364b84..2cec1ae5 100644 --- a/src/main/java/life/mosu/mosuserver/global/exception/ErrorCode.java +++ b/src/main/java/life/mosu/mosuserver/global/exception/ErrorCode.java @@ -116,7 +116,11 @@ public enum ErrorCode { BANNER_DELETE_FAILURE(HttpStatus.CONFLICT, "배너를 삭제하는 것에 실패하였습니다."), EXCEL_DATA_EMPTY(HttpStatus.NOT_FOUND, "엑셀 데이터가 없습니다."), EXCEL_DOWNLOAD_FAILURE(HttpStatus.CONFLICT, "엑셀 다운로드 중 문제가 발생했습니다."), - CACHE_UPDATE_FAIL(HttpStatus.CONFLICT, "캐시 업데이트에 실패하였습니다."); + CACHE_UPDATE_FAIL(HttpStatus.CONFLICT, "캐시 업데이트에 실패하였습니다."), + + // ID 찾기 관련 + NOT_FOUND_LOGIN_ID(HttpStatus.NOT_FOUND, "해당 아이디를 찾을 수 없습니다."); + private final HttpStatus status; private final String message; diff --git a/src/main/java/life/mosu/mosuserver/presentation/user/MyUserController.java b/src/main/java/life/mosu/mosuserver/presentation/user/MyUserController.java index 1a95c35f..9c81bfcd 100644 --- a/src/main/java/life/mosu/mosuserver/presentation/user/MyUserController.java +++ b/src/main/java/life/mosu/mosuserver/presentation/user/MyUserController.java @@ -6,8 +6,8 @@ import life.mosu.mosuserver.global.util.ApiResponseWrapper; import life.mosu.mosuserver.presentation.user.dto.ChangePasswordRequest; import life.mosu.mosuserver.presentation.user.dto.ChangePasswordResponse; -import life.mosu.mosuserver.presentation.user.dto.FindIdRequest; -import life.mosu.mosuserver.presentation.user.dto.FindIdResponse; +import life.mosu.mosuserver.presentation.user.dto.FindLoginIdRequest; +import life.mosu.mosuserver.presentation.user.dto.FindLoginIdResponse; import life.mosu.mosuserver.presentation.user.dto.FindPasswordRequest; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; @@ -25,11 +25,13 @@ public class MyUserController implements MyUserControllerDocs { private final MyUserService myUserService; @PostMapping("/find-id") - public ResponseEntity> findId( - @RequestBody @Valid FindIdRequest request + public ResponseEntity> findLoginId( + @RequestBody @Valid FindLoginIdRequest request ) { + FindLoginIdResponse response = myUserService.findLoginId(request); - return ResponseEntity.ok(ApiResponseWrapper.success(HttpStatus.OK, "아이디 찾기 요청 성공", null)); + return ResponseEntity.ok( + ApiResponseWrapper.success(HttpStatus.OK, "아이디 찾기 요청 성공", response)); } @PostMapping("/find-password") diff --git a/src/main/java/life/mosu/mosuserver/presentation/user/UserController.java b/src/main/java/life/mosu/mosuserver/presentation/user/UserController.java index 4249d48d..d8fb3aa3 100644 --- a/src/main/java/life/mosu/mosuserver/presentation/user/UserController.java +++ b/src/main/java/life/mosu/mosuserver/presentation/user/UserController.java @@ -1,6 +1,7 @@ package life.mosu.mosuserver.presentation.user; import life.mosu.mosuserver.application.user.UserService; +import life.mosu.mosuserver.global.annotation.UserId; import life.mosu.mosuserver.global.util.ApiResponseWrapper; import life.mosu.mosuserver.presentation.user.dto.CustomerKeyResponse; import life.mosu.mosuserver.presentation.user.dto.IsLoginIdAvailableResponse; @@ -21,7 +22,7 @@ public class UserController implements UserControllerDocs { @GetMapping("/customer-key") public ResponseEntity> getCustomerKey( - @RequestParam Long userId + @UserId final Long userId ) { String customerKey = userService.getCustomerKey(userId); diff --git a/src/main/java/life/mosu/mosuserver/presentation/user/UserControllerDocs.java b/src/main/java/life/mosu/mosuserver/presentation/user/UserControllerDocs.java index e478df1c..6b654dc4 100644 --- a/src/main/java/life/mosu/mosuserver/presentation/user/UserControllerDocs.java +++ b/src/main/java/life/mosu/mosuserver/presentation/user/UserControllerDocs.java @@ -7,6 +7,7 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; +import life.mosu.mosuserver.global.annotation.UserId; import life.mosu.mosuserver.global.util.ApiResponseWrapper; import life.mosu.mosuserver.presentation.user.dto.CustomerKeyResponse; import life.mosu.mosuserver.presentation.user.dto.IsLoginIdAvailableResponse; @@ -25,7 +26,7 @@ public interface UserControllerDocs { @ApiResponse(responseCode = "500", description = "서버 내부 오류") }) public ResponseEntity> getCustomerKey( - @RequestParam Long userId + @UserId final Long userId ); @Operation(summary = "로그인 ID 중복 확인", description = "회원가입 시 사용할 로그인 ID의 중복 여부를 확인합니다.") diff --git a/src/main/java/life/mosu/mosuserver/presentation/user/dto/FindIdRequest.java b/src/main/java/life/mosu/mosuserver/presentation/user/dto/FindIdRequest.java deleted file mode 100644 index 2b655038..00000000 --- a/src/main/java/life/mosu/mosuserver/presentation/user/dto/FindIdRequest.java +++ /dev/null @@ -1,8 +0,0 @@ -package life.mosu.mosuserver.presentation.user.dto; - -public record FindIdRequest ( - String name, - String p -) { - -} diff --git a/src/main/java/life/mosu/mosuserver/presentation/user/dto/FindIdResponse.java b/src/main/java/life/mosu/mosuserver/presentation/user/dto/FindIdResponse.java deleted file mode 100644 index 53006a1a..00000000 --- a/src/main/java/life/mosu/mosuserver/presentation/user/dto/FindIdResponse.java +++ /dev/null @@ -1,6 +0,0 @@ -package life.mosu.mosuserver.presentation.user.dto; - -public record FindIdResponse ( - String loginId -) { -} \ No newline at end of file diff --git a/src/main/java/life/mosu/mosuserver/presentation/user/dto/FindLoginIdRequest.java b/src/main/java/life/mosu/mosuserver/presentation/user/dto/FindLoginIdRequest.java new file mode 100644 index 00000000..4391cd31 --- /dev/null +++ b/src/main/java/life/mosu/mosuserver/presentation/user/dto/FindLoginIdRequest.java @@ -0,0 +1,11 @@ +package life.mosu.mosuserver.presentation.user.dto; + +import life.mosu.mosuserver.global.annotation.PhoneNumberPattern; + +public record FindLoginIdRequest( + String name, + @PhoneNumberPattern + String phoneNumber +) { + +} diff --git a/src/main/java/life/mosu/mosuserver/presentation/user/dto/FindLoginIdResponse.java b/src/main/java/life/mosu/mosuserver/presentation/user/dto/FindLoginIdResponse.java new file mode 100644 index 00000000..8ef499ba --- /dev/null +++ b/src/main/java/life/mosu/mosuserver/presentation/user/dto/FindLoginIdResponse.java @@ -0,0 +1,10 @@ +package life.mosu.mosuserver.presentation.user.dto; + +public record FindLoginIdResponse( + String loginId +) { + + public static FindLoginIdResponse from(String loginId) { + return new FindLoginIdResponse(loginId); + } +} \ No newline at end of file