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-13) modif review #15

Merged
merged 8 commits into from
Sep 5, 2024
Merged

🏄 :: (Meogo-13) modif review #15

merged 8 commits into from
Sep 5, 2024

Conversation

meltapplee
Copy link
Member

@meltapplee meltapplee commented Sep 5, 2024

close #13
리뷰수정

Summary by CodeRabbit

  • New Features

    • 리뷰 수정 기능 추가: 사용자가 리뷰를 수정할 수 있는 새로운 API 엔드포인트 및 서비스 추가.
    • 리뷰 수정 요청을 위한 DTO 클래스 추가.
    • 사용자 ID를 기반으로 사용자를 조회하는 기능 추가.
  • 변경 사항

    • 리뷰 클래스의 starcontent 속성을 가변으로 변경하여 수정 가능하도록 개선.
    • ReviewRequestReviewResponse에서 star 속성을 Float로 변경하여 정밀한 평점 표현 가능.
    • Review 클래스에서 userName 속성 제거 및 schoolId 속성 추가.
  • 버그 수정

    • 사용자 일치 오류를 처리하기 위한 새로운 예외 클래스 추가.
    • 리뷰를 찾을 수 없는 경우를 처리하기 위한 새로운 예외 클래스 추가.

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

coderabbitai bot commented Sep 5, 2024

Walkthrough

변경 사항은 Review 클래스의 속성 수정, 새로운 예외 클래스 추가, 리뷰 수정 기능을 위한 서비스 및 컨트롤러 확장, DTO 클래스 추가, 그리고 사용자 관련 기능을 개선하는 여러 서비스 변경을 포함합니다. 이러한 변경은 리뷰 관리 시스템의 유연성을 높이고, 사용자 검증 및 오류 처리를 강화합니다.

Changes

파일 경로 변경 요약
src/main/kotlin/org/meogo/domain/review/domain/... Review 클래스에서 userName 속성이 제거되고 schoolId 속성이 추가됨. starcontent 속성이 가변으로 변경되고, updateReview 메서드가 추가됨. UserMisMatchExceptionReviewNotFoundException 클래스가 새로 정의됨.
src/main/kotlin/org/meogo/domain/review/presentation/... ReviewControllerModifyReviewService가 추가되고, PATCH 요청을 처리하는 새로운 엔드포인트가 생성됨. ModifyReviewRequest DTO가 정의됨. ReviewRequestReviewResponsestar 속성이 Float로 변경됨.
src/main/kotlin/org/meogo/domain/review/repository/... ReviewRepository 인터페이스에 findById 메서드가 추가됨.
src/main/kotlin/org/meogo/domain/review/service/... CreateReviewService에서 userName 속성이 제거됨. ModifyReviewService가 추가되어 리뷰 수정 기능을 제공하며, QueryAllBySchoolIdService에서 사용자 정보를 UserFacade를 통해 가져오는 방식으로 변경됨.
src/main/kotlin/org/meogo/domain/user/facade/... UserFacadegetUserById 메서드가 추가되고, getUserByAccountId의 반환 타입이 User로 변경됨.
src/main/kotlin/org/meogo/global/error/exception/... ErrorCode enum에 USER_MISMATCHREVIEW_NOT_FOUND 항목이 추가되어 각각 사용자 불일치와 리뷰 미발견에 대한 오류 코드를 정의함.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant ReviewController
    participant ModifyReviewService
    participant ReviewRepository
    participant UserFacade

    User->>ReviewController: PATCH /modify
    ReviewController->>ModifyReviewService: modifyReview(reviewId, request)
    ModifyReviewService->>UserFacade: getCurrentUser()
    ModifyReviewService->>ReviewRepository: findById(reviewId)
    ModifyReviewService->>UserFacade: getUserById(review.userId)
    ModifyReviewService->>ReviewRepository: save(updatedReview)
    ReviewController->>User: Response
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.

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: 1

Outside diff range, codebase verification and nitpick comments (1)
src/main/kotlin/org/meogo/domain/review/service/CreateReviewService.kt (1)

Line range hint 17-28: 사용자 ID 널 가능성 처리

user.id가 널일 가능성을 고려하여 이를 처리하는 로직을 추가하는 것이 좋습니다. 현재 코드에서는 user.id!!를 사용하여 널이 아님을 단언하고 있지만, 이는 런타임 예외를 발생시킬 수 있습니다.

- userId = user.id!!,
+ userId = user.id ?: throw IllegalStateException("User ID is null")
Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits

Files that changed from the base of the PR and between c445f85 and bb66740.

Files selected for processing (12)
  • src/main/kotlin/org/meogo/domain/review/domain/Review.kt (1 hunks)
  • src/main/kotlin/org/meogo/domain/review/exception/UserMisMatchException.kt (1 hunks)
  • src/main/kotlin/org/meogo/domain/review/presentation/ReviewController.kt (3 hunks)
  • src/main/kotlin/org/meogo/domain/review/presentation/dto/request/ModifyReviewRequest.kt (1 hunks)
  • src/main/kotlin/org/meogo/domain/review/presentation/dto/request/ReviewRequest.kt (1 hunks)
  • src/main/kotlin/org/meogo/domain/review/presentation/dto/response/ReviewResponse.kt (1 hunks)
  • src/main/kotlin/org/meogo/domain/review/repository/ReviewRepository.kt (1 hunks)
  • src/main/kotlin/org/meogo/domain/review/service/CreateReviewService.kt (1 hunks)
  • src/main/kotlin/org/meogo/domain/review/service/ModifyReviewService.kt (1 hunks)
  • src/main/kotlin/org/meogo/domain/review/service/QueryAllBySchoolIdService.kt (1 hunks)
  • src/main/kotlin/org/meogo/domain/user/facade/UserFacade.kt (2 hunks)
  • src/main/kotlin/org/meogo/global/error/exception/ErrorCode.kt (1 hunks)
Additional comments not posted (28)
src/main/kotlin/org/meogo/domain/review/presentation/dto/response/ReviewResponse.kt (2)

8-8: 별점 속성의 타입 변경 승인

star 속성의 타입이 Long에서 Float으로 변경되었습니다. 이 변경은 별점을 소수점으로 표현할 수 있게 하여 정밀도를 높이는 효과가 있습니다.


8-8: 데이터베이스 및 클라이언트 코드에 대한 영향 검증 요청

star 속성의 타입 변경으로 인해 데이터베이스 스키마와 클라이언트 사이드 코드에 영향을 줄 수 있습니다. 데이터베이스의 변경 사항과 API 문서, 클라이언트 코드에서 이 변경이 제대로 반영되었는지 확인이 필요합니다.

src/main/kotlin/org/meogo/domain/review/exception/UserMisMatchException.kt (3)

1-1: 패키지 선언 확인

패키지 경로가 적절한지 확인해야 합니다. 이 경로가 프로젝트의 나머지 부분과 일관되게 구성되어 있는지 검토하는 것이 중요합니다.


3-4: 임포트 문 검토

ErrorCodeMeogoException 클래스가 올바르게 임포트되었는지 확인합니다. 이들 클래스의 경로와 접근성이 프로젝트의 다른 부분과 일치하는지 검증해야 합니다.


6-8: 예외 객체 정의 검토

UserMisMatchException 객체가 MeogoException을 상속받아 구현되었습니다. 사용된 ErrorCode.USER_MISMATCH가 이 상황에 적합한지 확인해야 합니다. 또한, 객체 선언 방식이 이 예외 상황에 적절한지 검토할 필요가 있습니다.

src/main/kotlin/org/meogo/domain/review/presentation/dto/request/ReviewRequest.kt (2)

9-9: 별점 속성의 데이터 유형 변경 승인

별점 속성의 데이터 유형이 Long에서 Float으로 변경되었습니다. 이 변경은 리뷰 시스템의 정밀도를 향상시키기 위해 소수점 별점을 허용합니다. 변경 사항을 승인합니다.


9-9: 변경된 데이터 유형의 영향 검증 요청

별점 속성의 데이터 유형 변경으로 인해 데이터베이스 저장, API 계약, 프론트엔드 컴포넌트 등 애플리케이션의 다른 부분에 미치는 영향을 검증해야 합니다.

다음 스크립트를 실행하여 변경된 데이터 유형의 영향을 검증하세요:

src/main/kotlin/org/meogo/domain/review/presentation/dto/request/ModifyReviewRequest.kt (3)

1-1: 패키지 선언 확인

패키지 선언이 적절하게 이루어졌습니다.


3-3: 필요한 라이브러리 임포트

javax.validation.constraints.Sizecontent 필드의 유효성 검사에 사용됩니다. 적절한 임포트입니다.


5-10: 데이터 클래스 구조 검토

ModifyReviewRequest 클래스는 리뷰 수정을 위한 데이터를 정의합니다. 각 필드는 다음과 같습니다:

  • content: 리뷰 내용을 나타내며, 최소 1자에서 최대 300자까지 입력 가능합니다.
  • star: 별점을 나타내는 Float 타입입니다. 별점 시스템에 적합한 타입 선택입니다.
  • image: 이미지 URL을 선택적으로 포함할 수 있는 String? 타입입니다. 이미지가 없는 경우를 고려하여 nullable로 선언된 것이 적절합니다.

전반적으로 클래스 구조가 명확하고, 필드 유효성 검사가 적절히 구현되어 있습니다.

src/main/kotlin/org/meogo/domain/review/repository/ReviewRepository.kt (1)

11-11: findById 메소드 추가 승인

새로운 findById(id: Long): Review? 메소드는 ID로 리뷰를 검색할 수 있게 해주며, 리뷰가 없을 경우 null을 반환할 수 있도록 nullable 타입을 사용하는 것이 적절합니다. 이 변경은 인터페이스의 기능을 적절히 확장하며, 기존 메소드와 잘 통합되어 있습니다.

src/main/kotlin/org/meogo/global/error/exception/ErrorCode.kt (1)

10-10: USER_MISMATCH 항목 추가 승인

새로운 에러 코드 USER_MISMATCH가 401 상태 코드와 "User Mismatch" 메시지와 함께 추가되었습니다. 이 변경은 사용자 자격 증명 또는 식별자와 관련된 불일치 시나리오에 대해 더 세밀한 오류 보고 및 처리를 가능하게 합니다. 기존 패턴을 따르며, 에러 코드의 일관성과 명확성을 유지하고 있습니다.

src/main/kotlin/org/meogo/domain/user/facade/UserFacade.kt (2)

20-21: 명시적인 반환 유형 정의를 통한 타입 안전성 및 명확성 향상

getUserByAccountId 함수에 User 반환 유형을 명시적으로 정의함으로써 코드의 가독성과 안정성이 향상되었습니다. 이 변경은 Kotlin의 최선의 관행에 부합합니다.


23-24: 새로운 사용자 식별 함수 추가

getUserById 함수는 UUID를 사용하여 사용자를 식별하는 새로운 방법을 제공합니다. 이는 더욱 견고한 사용자 관리 기능을 가능하게 합니다. userRepository.findById(id)를 사용하여 사용자를 찾고, 사용자가 없는 경우 UserNotFoundException을 발생시키는 방식은 적절합니다.

src/main/kotlin/org/meogo/domain/review/service/ModifyReviewService.kt (1)

10-14: 클래스 정의 및 주입 승인

ModifyReviewService 클래스는 @Service 어노테이션을 사용하여 서비스 계층 컴포넌트로 적절히 표시되었습니다. 또한, ReviewRepositoryUserFacade를 생성자 주입하는 방식은 의존성 주입을 통한 결합도 감소와 테스트 용이성 측면에서 모범적인 사례입니다.

src/main/kotlin/org/meogo/domain/review/domain/Review.kt (7)

18-18: 날짜 속성의 null 허용 여부 확인

date 속성에 @Column(nullable = false) 어노테이션이 추가되었습니다. 이 변경은 date가 항상 필요함을 보장합니다.


21-21: 사용자 ID 컬럼 정의 확인

userId 속성에 대한 컬럼 정의가 BINARY(16)으로 명시되어 있습니다. 이는 UUID를 효율적으로 저장하기 위한 변경으로 보입니다.


24-24: 학교 ID 속성의 null 허용 여부 확인

schoolId 속성에 @Column(name = "school_id", nullable = false) 어노테이션이 추가되어 null을 허용하지 않습니다. 이는 학교 ID가 항상 필요함을 보장합니다.


27-29: 별점 속성의 변경 사항 검토

star 속성이 Long에서 Float로 변경되었으며, var로 선언되어 값의 수정이 가능해졌습니다. 또한 @Column(nullable = false) 어노테이션이 추가되어 별점이 항상 필요함을 보장합니다.


30-32: 내용 속성의 변경 사항 검토

content 속성이 val에서 var로 변경되어 값의 수정이 가능해졌습니다. @Column(nullable = false) 어노테이션이 추가되어 내용이 항상 필요함을 보장합니다.


33-34: 사진 속성의 변경 사항 검토

picture 속성이 val에서 var로 변경되어 값의 수정이 가능해졌습니다. 이 변경은 리뷰에 사진을 추가하거나 변경할 수 있는 유연성을 제공합니다.


36-45: 리뷰 업데이트 메소드 검토

새로 추가된 updateReview 메소드는 content, star, picture 속성을 업데이트합니다. 이 메소드는 객체의 상태를 변경하고 업데이트된 인스턴스를 반환합니다. 메소드 구현이 명확하며, 리뷰의 세부 사항을 업데이트하는 명확한 메커니즘을 제공합니다.

src/main/kotlin/org/meogo/domain/review/service/CreateReviewService.kt (1)

Line range hint 17-28: 사용자 이름 필드 제거 확인

Review 객체에서 userName 필드가 제거되었습니다. 이 변경사항이 다른 애플리케이션 부분에 영향을 미치지 않는지 확인이 필요합니다. userName을 사용하는 다른 코드 부분도 업데이트되었는지 검토해 주세요.

src/main/kotlin/org/meogo/domain/review/service/QueryAllBySchoolIdService.kt (2)

13-14: 생성자에 UserFacade 추가 승인

UserFacade를 생성자에 추가함으로써 사용자 데이터 검색의 캡슐화와 모듈화가 향상되었습니다. 이는 의존성 역전 원칙을 준수하며, 서비스가 사용자 데이터 검색의 구체적인 구현에 직접 의존하지 않도록 합니다.


24-24: queryAllBySchoolId 메소드 수정 승인

메소드에서 userFacade.getUserById(review.userId).name를 사용하여 사용자 이름을 검색하도록 변경한 것은 데이터 캡슐화를 강화하고 객체 지향 설계를 개선합니다. 이 변경으로 유지보수성이 향상될 수 있으나, UserFacade의 사용이 성능에 미치는 영향을 검토할 필요가 있습니다.

성능 영향을 확인하기 위해 다음 스크립트를 실행하세요:

src/main/kotlin/org/meogo/domain/review/presentation/ReviewController.kt (3)

4-4: 새로운 기능을 위한 필요한 import 추가

ModifyReviewRequestModifyReviewService를 import하는 것은 새로운 리뷰 수정 기능을 위해 필요합니다.

Also applies to: 7-7


23-24: 새로운 서비스 추가 확인

ModifyReviewService가 클래스 생성자에 주입되어 새로운 리뷰 수정 기능을 지원합니다.


37-39: 새로운 수정 엔드포인트 추가 확인

새로운 @PatchMapping 엔드포인트가 리뷰 수정 기능을 위해 추가되었습니다. review_idModifyReviewRequest 객체를 받아 처리합니다.

ModifyReviewRequest 객체의 유효성 검사가 필요할 수 있습니다. 유효성 검사 로직을 추가하는 것이 좋을 것 같습니다.

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: 1

Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits

Files that changed from the base of the PR and between bb66740 and 8b0a41a.

Files selected for processing (5)
  • src/main/kotlin/org/meogo/domain/review/exception/ReviewNotFoundException.kt (1 hunks)
  • src/main/kotlin/org/meogo/domain/review/repository/ReviewRepository.kt (1 hunks)
  • src/main/kotlin/org/meogo/domain/review/service/ModifyReviewService.kt (1 hunks)
  • src/main/kotlin/org/meogo/domain/review/service/QueryAllBySchoolIdService.kt (1 hunks)
  • src/main/kotlin/org/meogo/global/error/exception/ErrorCode.kt (1 hunks)
Files skipped from review as they are similar to previous changes (1)
  • src/main/kotlin/org/meogo/domain/review/service/ModifyReviewService.kt
Additional comments not posted (9)
src/main/kotlin/org/meogo/domain/review/exception/ReviewNotFoundException.kt (2)

1-1: 패키지 선언 승인

패키지 경로가 명확하며 적절하게 구조화되어 있습니다.


3-4: 임포트 승인

임포트된 ErrorCodeMeogoException은 이 예외 정의에 필수적입니다.

src/main/kotlin/org/meogo/domain/review/repository/ReviewRepository.kt (2)

9-10: 필요한 변경 사항을 승인합니다.

findAllBySchoolId 메소드의 반환 타입이 nullable로 변경되었습니다. 이는 학교 ID에 대한 리뷰가 없는 경우를 처리하기 위한 적절한 변경입니다. 메소드가 null을 반환할 수 있는 상황에 대한 문서화를 추가하는 것이 좋을 것입니다.


11-11: 새로운 메소드 추가를 승인합니다.

findById 메소드가 추가되어 ID로 리뷰를 직접 검색할 수 있게 되었습니다. 이는 많은 애플리케이션에서 요구되는 일반적인 기능입니다. 메소드가 null을 반환할 수 있는 상황에 대한 문서화를 추가하는 것이 좋을 것입니다.

src/main/kotlin/org/meogo/global/error/exception/ErrorCode.kt (2)

10-10: 사용자 불일치 오류 코드 추가 승인

USER_MISMATCH 오류 코드가 적절하게 추가되었습니다. 401 상태 코드는 인증 오류에 적합하며, "User Mismatch" 메시지는 오류의 성격을 명확하게 설명합니다.


13-13: 리뷰 미발견 오류 코드 추가 승인

REVIEW_NOT_FOUND 오류 코드가 적절하게 추가되었습니다. 404 상태 코드는 찾을 수 없는 리소스에 대한 오류를 나타내는 데 적합하며, "Review not found" 메시지는 사용자에게 명확한 정보를 제공합니다.

src/main/kotlin/org/meogo/domain/review/service/QueryAllBySchoolIdService.kt (3)

5-5: UserFacade 임포트 승인

새로운 의존성 UserFacade가 정상적으로 추가되었습니다.


13-14: 생성자 수정 승인

UserFacade를 생성자에 추가하여 사용자 정보를 더 안전하게 관리할 수 있게 되었습니다.


19-25: 메소드 변경 승인 및 성능 검토 권장

queryAllBySchoolId 메소드가 UserFacade를 사용하여 사용자 이름을 가져오는 방식으로 변경되었습니다. 이는 데이터 캡슐화를 향상시키고 유지보수성을 높입니다.

성능 관련하여, userFacade.getUserById 호출이 각 리뷰마다 발생하므로, 사용자 수가 많을 경우 성능 저하가 발생할 수 있습니다. 이 부분에 대한 추가적인 성능 테스트를 권장합니다.

Also applies to: 35-35

@meltapplee meltapplee merged commit 28153f1 into main Sep 5, 2024
2 checks passed
@meltapplee meltapplee deleted the 13-modif-review branch September 5, 2024 10:54
This was referenced Sep 9, 2024
This was referenced Sep 30, 2024
This was referenced Oct 17, 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.

리뷰 수정
1 participant