-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
🏄 :: (Meogo-5) signup signin check #6
Conversation
Walkthrough이번 변경 사항은 사용자 관리 기능을 위한 새로운 RESTful API와 관련된 여러 클래스를 추가했습니다. 비밀번호 불일치 예외를 처리하는 예외 클래스와 사용자 가입, 로그인, 계정 ID 확인을 위한 서비스 및 DTO 클래스가 도입되었습니다. 이러한 변경은 사용자 인증 및 등록 프로세스를 보다 체계적으로 관리할 수 있도록 합니다. Changes
Sequence Diagram(s)sequenceDiagram
participant User
participant UserController
participant UserSignUpService
participant UserSignInService
participant CheckAccountIdService
User->>UserController: /signup(UserSignUpRequest)
UserController->>UserSignUpService: execute(UserSignUpRequest)
UserSignUpService->>User: Create User
UserSignUpService->>UserController: Return TokenResponse
User->>UserController: /signin(UserSignInRequest)
UserController->>UserSignInService: execute(UserSignInRequest)
UserSignInService->>User: Authenticate User
UserSignInService->>UserController: Return TokenResponse
User->>UserController: /check(UserCheckRequest)
UserController->>CheckAccountIdService: execute(UserCheckRequest)
CheckAccountIdService->>UserController: Return Boolean
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
Outside diff range, codebase verification and nitpick comments (4)
src/main/kotlin/org/meogo/domain/user/service/UserSignInService.kt (1)
19-27
: 로그인 로직이 잘 구현되었습니다!
execute
메서드는@Transactional
로 선언되어 트랜잭션 경계가 명확히 정의되어 있습니다. 메서드 내부에서는 다음과 같은 작업이 순차적으로 이루어집니다:
accountId
를 사용하여 사용자를 조회하고, 사용자가 존재하지 않는 경우UserNotFoundException
을 던집니다.PasswordEncoder
를 사용하여 비밀번호를 검증하고, 일치하지 않는 경우PasswordMismatchException
을 던집니다.JwtTokenProvider
를 사용하여 토큰을 생성하고 반환합니다.이는 로그인 흐름을 적절하게 처리하고 있습니다.
개선 제안:
- 사용자 조회 및 비밀번호 검증 로직을 별도의 private 메서드로 추출하면 가독성과 유지보수성을 높일 수 있습니다.
- 메서드 시작 부분에 로깅 문을 추가하면 추적 가능성을 향상시킬 수 있습니다.
src/main/kotlin/org/meogo/domain/user/presentation/UserController.kt (3)
25-30
: 회원가입 엔드포인트를 개선해보세요.회원가입 엔드포인트의 기능은 잘 구현되었습니다. 하지만 다음과 같은 개선 사항을 고려해보세요:
- try-catch 블록을 사용하여 예외 처리를 추가하세요. 이를 통해 예기치 않은 오류 발생 시 적절한 응답을 반환할 수 있습니다.
- 로깅 문을 추가하여 가시성을 높이세요. 로깅을 통해 요청 처리 과정을 추적하고 디버깅에 도움을 받을 수 있습니다.
+import org.slf4j.Logger +import org.slf4j.LoggerFactory + @PostMapping("/signup") fun signUp( @Valid @RequestBody request: UserSignUpRequest -): TokenResponse = - userSignUpService.execute(request) +): TokenResponse { + val logger: Logger = LoggerFactory.getLogger(this::class.java) + return try { + logger.info("Received signup request: {}", request) + userSignUpService.execute(request) + } catch (e: Exception) { + logger.error("Error during signup", e) + throw e + } +}
32-34
: 로그인 엔드포인트를 개선해보세요.로그인 엔드포인트의 기능은 잘 구현되었습니다. 하지만 다음과 같은 개선 사항을 고려해보세요:
- try-catch 블록을 사용하여 예외 처리를 추가하세요. 이를 통해 예기치 않은 오류 발생 시 적절한 응답을 반환할 수 있습니다.
- 로깅 문을 추가하여 가시성을 높이세요. 로깅을 통해 요청 처리 과정을 추적하고 디버깅에 도움을 받을 수 있습니다.
+import org.slf4j.Logger +import org.slf4j.LoggerFactory + @PostMapping("/signin") -fun signIn(@RequestBody request: UserSignInRequest): TokenResponse = - userSignInService.execute(request) +fun signIn(@RequestBody request: UserSignInRequest): TokenResponse { + val logger: Logger = LoggerFactory.getLogger(this::class.java) + return try { + logger.info("Received signin request: {}", request) + userSignInService.execute(request) + } catch (e: Exception) { + logger.error("Error during signin", e) + throw e + } +}
36-38
: 계정 ID 확인 엔드포인트를 개선해보세요.계정 ID 확인 엔드포인트의 기능은 잘 구현되었습니다. 하지만 다음과 같은 개선 사항을 고려해보세요:
- try-catch 블록을 사용하여 예외 처리를 추가하세요. 이를 통해 예기치 않은 오류 발생 시 적절한 응답을 반환할 수 있습니다.
- 로깅 문을 추가하여 가시성을 높이세요. 로깅을 통해 요청 처리 과정을 추적하고 디버깅에 도움을 받을 수 있습니다.
+import org.slf4j.Logger +import org.slf4j.LoggerFactory + @PostMapping("/check") -fun checkAccountId(@RequestBody request: UserCheckRequest): Boolean = - userCheckAccountIdService.execute(request) +fun checkAccountId(@RequestBody request: UserCheckRequest): Boolean { + val logger: Logger = LoggerFactory.getLogger(this::class.java) + return try { + logger.info("Received account ID check request: {}", request) + userCheckAccountIdService.execute(request) + } catch (e: Exception) { + logger.error("Error during account ID check", e) + throw e + } +}
Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Files selected for processing (9)
- src/main/kotlin/org/meogo/domain/user/exception/PasswordMismatchException.kt (1 hunks)
- src/main/kotlin/org/meogo/domain/user/presentation/UserController.kt (1 hunks)
- src/main/kotlin/org/meogo/domain/user/presentation/dto/request/UserCheckRequest.kt (1 hunks)
- src/main/kotlin/org/meogo/domain/user/presentation/dto/request/UserSignInRequest.kt (1 hunks)
- src/main/kotlin/org/meogo/domain/user/presentation/dto/request/UserSignUpRequest.kt (1 hunks)
- src/main/kotlin/org/meogo/domain/user/service/CheckAccountIdService.kt (1 hunks)
- src/main/kotlin/org/meogo/domain/user/service/UserSignInService.kt (1 hunks)
- src/main/kotlin/org/meogo/domain/user/service/UserSignUpService.kt (1 hunks)
- src/main/kotlin/org/meogo/global/error/exception/ErrorCode.kt (1 hunks)
Files skipped from review due to trivial changes (2)
- src/main/kotlin/org/meogo/domain/user/presentation/dto/request/UserCheckRequest.kt
- src/main/kotlin/org/meogo/domain/user/presentation/dto/request/UserSignInRequest.kt
Additional comments not posted (12)
src/main/kotlin/org/meogo/domain/user/exception/PasswordMismatchException.kt (2)
1-4
: 패키지 선언과 임포트가 적절합니다.사용자 도메인의 예외 클래스를 위한 패키지 구조가 잘 정의되어 있으며, 필요한 글로벌 예외 처리 클래스들을 임포트하고 있습니다.
6-8
:PasswordMismatchException
클래스 정의가 적절합니다.예외 클래스를 객체로 정의하는 것은 인스턴스 별 상태가 필요하지 않은 예외에 대한 좋은 관행입니다.
MeogoException
을 상속받아 이 사용자 정의 예외를 시스템의 다른 예외와 일관되게 처리할 수 있습니다. 생성자에ErrorCode.PASSWORD_MISMATCH
를 전달하여 이 예외에 대한 특정 오류 코드를 제공하는 것은 오류 처리 및 로깅에 유용할 수 있습니다.src/main/kotlin/org/meogo/global/error/exception/ErrorCode.kt (1)
9-9
: 잘 작성된 코드입니다!새로 추가된
PASSWORD_MISMATCH
열거형 상수는 비밀번호 불일치 시나리오에 대한 적절한 HTTP 상태 코드와 메시지를 정의하고 있습니다. 이는 인증 관련 오류 처리 기능을 향상시킵니다.src/main/kotlin/org/meogo/domain/user/service/CheckAccountIdService.kt (1)
1-14
: LGTM!이 클래스는 잘 구조화되어 있으며 단일 책임 원칙을 따르고 있습니다.
UserRepository
의 의존성 주입은 느슨한 결합과 테스트 가능성을 촉진합니다.execute
메서드는 명확한 목적을 가지고 있으며 저장소를 사용하여 계정 ID의 존재 여부를 확인합니다.src/main/kotlin/org/meogo/domain/user/presentation/dto/request/UserSignUpRequest.kt (6)
6-21
: LGTM!데이터 클래스
UserSignUpRequest
가 잘 정의되어 있습니다. 속성들의 이름이 명확하고 유효성 검사 제약 조건이 적절하게 적용되어 있습니다.
7-9
: LGTM!
accountId
속성이@NotNull
과@Size
제약 조건으로 잘 정의되어 있습니다. 아이디의 길이를 4~20자로 제한하는 것이 적절해 보입니다.
11-13
: LGTM!
password
속성이@NotNull
과@Size
제약 조건으로 잘 정의되어 있습니다. 비밀번호의 길이를 12~20자로 제한하는 것이 적절해 보입니다.
15-16
: LGTM!
name
속성이@NotNull
제약 조건으로 잘 정의되어 있습니다.
18-18
: LGTM!
profile
속성이 null 허용으로 잘 정의되어 있습니다. 이는 선택적인 필드임을 나타냅니다.
20-20
: LGTM!
enrolledSchool
속성이 null 허용으로 잘 정의되어 있습니다. 이는 선택적인 필드임을 나타냅니다.src/main/kotlin/org/meogo/domain/user/service/UserSignUpService.kt (1)
19-30
: LGTM!
execute
메서드는 사용자 가입에 필요한 모든 단계를 올바르게 수행하고 있습니다:
UserSignUpRequest
에서User
엔티티를 생성합니다.PasswordEncoder
를 사용하여 비밀번호를 인코딩합니다.enrolledSchool
속성에 대해 안전 호출 연산자?.
를 사용하여 null 값을 안전하게 처리합니다.- 사용자의 역할을 기본적으로
UserRole.USER
로 설정합니다.UserRepository
를 사용하여 사용자를 데이터베이스에 저장합니다.JwtTokenProvider
의getToken
메서드를 호출하여TokenResponse
를 반환합니다.코드 변경 사항이 승인되었습니다.
src/main/kotlin/org/meogo/domain/user/service/UserSignInService.kt (1)
13-18
: 클래스 구조가 잘 설계되었습니다!
UserSignInService
클래스는@Service
어노테이션을 사용하여 적절하게 선언되었으며, 생성자를 통해 필요한 의존성(UserRepository
,PasswordEncoder
,JwtTokenProvider
)을 주입받고 있습니다. 이는 좋은 설계 관행을 따르고 있습니다.
close #5
Summary by CodeRabbit
New Features
Bug Fixes