Skip to content
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

Merged
merged 4 commits into from
Sep 2, 2024
Merged

Conversation

meltapplee
Copy link
Member

@meltapplee meltapplee commented Sep 2, 2024

close #5
로그인
회원가입
아이디 중복확인
아이디 중복확인2

Summary by CodeRabbit

  • New Features

    • 사용자 관리 기능을 위한 RESTful API가 추가되었습니다. (회원가입, 로그인, 계정 ID 확인)
    • 비밀번호 불일치에 대한 구체적인 오류 코드가 도입되었습니다.
    • 사용자 요청을 위한 데이터 클래스가 추가되었습니다. (회원가입, 로그인, 계정 확인)
    • 사용자 등록 및 인증을 위한 서비스가 추가되었습니다. (회원가입, 로그인 서비스)
  • Bug Fixes

    • 비밀번호 불일치 오류 처리 개선.

@meltapplee meltapplee added the 기능개발 make something label Sep 2, 2024
@meltapplee meltapplee self-assigned this Sep 2, 2024
Copy link

coderabbitai bot commented Sep 2, 2024

Walkthrough

이번 변경 사항은 사용자 관리 기능을 위한 새로운 RESTful API와 관련된 여러 클래스를 추가했습니다. 비밀번호 불일치 예외를 처리하는 예외 클래스와 사용자 가입, 로그인, 계정 ID 확인을 위한 서비스 및 DTO 클래스가 도입되었습니다. 이러한 변경은 사용자 인증 및 등록 프로세스를 보다 체계적으로 관리할 수 있도록 합니다.

Changes

파일 경로 변경 요약
src/main/kotlin/org/meogo/domain/user/exception/PasswordMismatchException.kt PasswordMismatchException 객체 추가, MeogoException 확장, 비밀번호 불일치 처리.
src/main/kotlin/org/meogo/global/error/exception/ErrorCode.kt ErrorCode 열거형에 PASSWORD_MISMATCH 추가, HTTP 상태 코드 401 및 메시지 정의.
src/main/kotlin/org/meogo/domain/user/presentation/UserController.kt UserController 클래스 추가, 사용자 가입, 로그인, 계정 ID 확인을 위한 RESTful API 구현.
src/main/kotlin/org/meogo/domain/user/presentation/dto/request/UserCheckRequest.kt UserCheckRequest 데이터 클래스 추가, 계정 ID 검증을 위한 요청 객체 정의.
src/main/kotlin/org/meogo/domain/user/presentation/dto/request/UserSignInRequest.kt UserSignInRequest 데이터 클래스 추가, 사용자 로그인 요청 데이터 구조 정의.
src/main/kotlin/org/meogo/domain/user/presentation/dto/request/UserSignUpRequest.kt UserSignUpRequest 데이터 클래스 추가, 사용자 가입 요청 데이터 구조 및 유효성 검사 정의.
src/main/kotlin/org/meogo/domain/user/service/CheckAccountIdService.kt CheckAccountIdService 클래스 추가, 계정 ID 존재 여부 확인 기능 구현.
src/main/kotlin/org/meogo/domain/user/service/UserSignInService.kt UserSignInService 클래스 추가, 사용자 로그인 기능 및 JWT 토큰 생성 구현.
src/main/kotlin/org/meogo/domain/user/service/UserSignUpService.kt UserSignUpService 클래스 추가, 사용자 등록 기능 및 JWT 토큰 생성 구현.

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
Loading

🐰 "변화의 바람이 불어와,
사용자 관리가 새로워,
비밀번호 맞춤의 기쁨,
가입과 로그인, 모두 함께,
계정 확인도 손쉽게,
새 시대의 시작을 축하해!" 🌟


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?

Share
Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai generate interesting stats about this repository and render them as a table.
    • @coderabbitai show all the console.log statements in this repository.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

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)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.
Early access features: disabled

We are currently testing the following features in early access:

  • Anthropic claude-3-5-sonnet for code reviews: Anthropic claims that the new Claude model has stronger code understanding and code generation capabilities than their previous models. Note: Our default code review model was also updated late last week. Please compare the quality of the reviews between the two models by toggling the early access feature.

Note:

  • You can enable or disable early access features from the CodeRabbit UI or by updating the CodeRabbit configuration file.
  • Please join our Discord Community to provide feedback and report issues on the discussion post.

Copy link

@coderabbitai coderabbitai bot left a 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로 선언되어 트랜잭션 경계가 명확히 정의되어 있습니다. 메서드 내부에서는 다음과 같은 작업이 순차적으로 이루어집니다:

  1. accountId를 사용하여 사용자를 조회하고, 사용자가 존재하지 않는 경우 UserNotFoundException을 던집니다.
  2. PasswordEncoder를 사용하여 비밀번호를 검증하고, 일치하지 않는 경우 PasswordMismatchException을 던집니다.
  3. 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

Commits

Files that changed from the base of the PR and between 2254d0f and e7c7fa0.

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를 사용하여 사용자를 데이터베이스에 저장합니다.
  • JwtTokenProvidergetToken 메서드를 호출하여 TokenResponse를 반환합니다.

코드 변경 사항이 승인되었습니다.

src/main/kotlin/org/meogo/domain/user/service/UserSignInService.kt (1)

13-18: 클래스 구조가 잘 설계되었습니다!

UserSignInService 클래스는 @Service 어노테이션을 사용하여 적절하게 선언되었으며, 생성자를 통해 필요한 의존성(UserRepository, PasswordEncoder, JwtTokenProvider)을 주입받고 있습니다. 이는 좋은 설계 관행을 따르고 있습니다.

@meltapplee meltapplee merged commit 5bd41b4 into main Sep 2, 2024
2 checks passed
@meltapplee meltapplee deleted the 5-signup-signin-check branch September 2, 2024 11:14
@coderabbitai coderabbitai bot mentioned this pull request Oct 18, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
기능개발 make something
Projects
None yet
Development

Successfully merging this pull request may close these issues.

로그인, 회원가입, 아이디 중복체크 api
1 participant