Skip to content

Conversation

@momuzzi
Copy link
Member

@momuzzi momuzzi commented Feb 10, 2025

#️⃣ 요약 설명

  1. 사용자가 프로필 job을 바꾸고 다른 직무의 공고를 스크랩한 경우 직무에 맞는 공고 반환을 위해 jobName 필드를 추가했습니다
  2. isScraped 필드명을 isScrapped로 수정했습니다.

📝 작업 내용

코드의 흐름이나 중요한 부분을 작성해주세요.

// 핵심 코드를 붙여넣기 해주세요

코드에 대한 간단한 설명 부탁드립니다.

동작 확인

기능을 실행했을 때 정상 동작하는지 여부를 확인하고 사진을 올려주세요

ex) 테스트 코드 작성후 성공 사진
ex) swagger 사진

💬 리뷰 요구사항(선택)

리뷰어가 특별히 봐주었으면 하는 부분이 있다면 작성해주세요

ex) 메서드 XXX의 이름을 더 잘 짓고 싶은데 혹시 좋은 명칭이 있을까요?

Summary by CodeRabbit

  • 신규 기능

    • 채용 스크랩 정보에 작업명(job name)이 추가되어, 구직 관련 세부 정보를 더 명확하게 확인할 수 있습니다.
    • 스크랩 응답 구조가 단일 객체로 변경되어, 보다 간편한 데이터 처리가 가능해졌습니다.
  • 리팩터

    • 스크랩 상태를 나타내는 명칭을 일관되게 개선하고, 불필요한 URL 정보 항목을 제거하여 응답 구조를 간소화했습니다.
    • 데이터 변환 프로세스를 최적화하여 전반적인 처리 효율을 향상시켰습니다.

@coderabbitai
Copy link

coderabbitai bot commented Feb 10, 2025

Walkthrough

이번 PR은 코드베이스 전반에 걸쳐 boolean 변수 및 필드의 명명 규칙을 일관되게 수정하는 작업과 RecruitScrap 관련 DTO 변환 로직을 개선하는 변경 사항을 포함합니다. RecruitConverter, RecommendRecruitsDTO, RecruitQueryService에서 isScraped라는 이름을 isScrapped로 변경하였으며, RecruitScrap 클래스에는 새로운 jobName 필드가 추가되었습니다. 또한 RecruitScrapConverter와 RecruitScrapQueryService에서 RecruitScrap 객체를 직접 활용하여 변환 과정을 단순화하였습니다.

Changes

File(s) Change Summary
src/.../recruit/converter/RecruitConverter.java
src/.../recruit/dto/response/RecommendRecruitsDTO.java
메서드 매개변수 및 DTO 필드의 이름을 isScraped → isScrapped로 변경
src/.../recruit/service/RecruitQueryService.java 변수 scrapedRecruitIds가 scrappedRecruitIds로 이름 변경
src/.../recruitScrap/RecruitScrap.java RecruitScrap 클래스에 jobName(String) 필드 추가
src/.../recruitScrap/converter/RecruitScrapConverter.java toEntity 메서드에서 jobName 설정 추가
toRecruitScrapResponseDTO 메서드의 파라미터 변경(Recruit, jobName → Job, List) 및 isScraped → isScrapped 적용
src/.../recruitScrap/dto/response/RecruitScrapResponseDTO.java DTO 내 recruitId, companyName, title, deadLine 필드 삭제 및 isScraped 필드를 isScrapped로 변경, recruitScrapThumbNailInfoDTOList 필드 추가
src/.../recruitScrap/service/RecruitScrapQueryService.java findRecruitScrapList 메서드에서 반환 타입을 List에서 RecruitScrapResponseDTO로 변경하고, 로직을 단순화하여 RecruitScrap을 직접 RecruitScrapResponseDTO로 매핑하도록 수정
src/.../recruitScrap/controller/RecruitScrapController.java getRecruitScrapList 메서드의 반환 타입을 ApiResponse<List>에서 ApiResponse로 변경

Sequence Diagram(s)

sequenceDiagram
    participant Q as RecruitScrapQueryService
    participant C as RecruitScrapConverter
    participant D as RecruitScrapResponseDTO Builder
    Q->>C: findRecruitScrapList() 호출 (RecruitScrap 리스트 처리)
    C->>D: toRecruitScrapResponseDTO(RecruitScrap) 호출
    D-->>C: RecruitScrapResponseDTO 반환
    C-->>Q: DTO 반환
Loading

Possibly related PRs

Suggested labels

fix

Suggested reviewers

  • jjeongdong
  • kyoooooong
  • jpark0506

Poem

깡총깡총 뛰노는 작은 토끼
코드 숲 속에 바뀐 이름이 반짝여요
isScraped에서 isScrapped로
새롭게 피어난 jobName의 향기
모두 함께 춤추는 변화를 노래하리! 🐰🎶


📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 9fc6d01 and 5da300a.

📒 Files selected for processing (5)
  • src/main/java/UMC/career_mate/domain/recruitScrap/controller/RecruitScrapController.java (1 hunks)
  • src/main/java/UMC/career_mate/domain/recruitScrap/converter/RecruitScrapConverter.java (1 hunks)
  • src/main/java/UMC/career_mate/domain/recruitScrap/dto/response/RecruitScrapResponseDTO.java (1 hunks)
  • src/main/java/UMC/career_mate/domain/recruitScrap/repository/RecruitScrapRepository.java (1 hunks)
  • src/main/java/UMC/career_mate/domain/recruitScrap/service/RecruitScrapQueryService.java (2 hunks)
🔇 Additional comments (6)
src/main/java/UMC/career_mate/domain/recruitScrap/dto/response/RecruitScrapResponseDTO.java (1)

7-20: 구조가 잘 설계되었습니다!

중첩된 record를 사용하여 관련 데이터를 논리적으로 그룹화하였고, 이름 규칙도 일관성 있게 적용되었습니다.

src/main/java/UMC/career_mate/domain/recruitScrap/repository/RecruitScrapRepository.java (1)

19-20: 쿼리 최적화가 잘 되었습니다!

join fetch를 사용하여 N+1 문제를 방지하였고, 메서드 시그니처와 쿼리가 명확합니다.

src/main/java/UMC/career_mate/domain/recruitScrap/service/RecruitScrapQueryService.java (1)

23-25: member.getJob()에 대한 null 체크 필요

member.getJob()이 null을 반환할 경우 NullPointerException이 발생할 수 있습니다.

src/main/java/UMC/career_mate/domain/recruitScrap/converter/RecruitScrapConverter.java (2)

19-19: member.getJob()에 대한 null 체크 필요

member.getJob()이 null을 반환할 경우 NullPointerException이 발생할 수 있습니다.


31-46: 변환 메서드들이 잘 구현되었습니다!

새로 추가된 toRecruitScrapThumbNailInfoDTOtoEmptyRecruitScrapResponseDTO 메서드들이 명확하고 일관된 패턴을 따르고 있습니다.

src/main/java/UMC/career_mate/domain/recruitScrap/controller/RecruitScrapController.java (1)

61-62: API 응답 타입 변경에 대한 주의 필요

응답 타입이 List<RecruitScrapResponseDTO>에서 단일 RecruitScrapResponseDTO로 변경되었습니다. 이는 API를 사용하는 클라이언트 코드에 영향을 미칠 수 있는 주요 변경사항입니다.

다음 사항들을 확인해 주시기 바랍니다:

  • 클라이언트 측에서 이 변경사항에 대해 인지하고 있는지
  • 클라이언트 코드가 새로운 응답 형식을 처리할 수 있도록 수정되었는지
✨ Finishing Touches
  • 📝 Generate Docstrings (Beta)

🪧 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>, please review it.
    • 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 gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @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 generate docstrings to generate docstrings for this PR. (Beta)
  • @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: 2

🧹 Nitpick comments (1)
src/main/java/UMC/career_mate/domain/recruitScrap/service/RecruitScrapQueryService.java (1)

28-28: 매핑 로직이 개선되었습니다!

스트림 매핑 로직이 단순화되어 가독성과 유지보수성이 향상되었습니다. RecruitScrap 객체를 직접 사용하는 방식으로 변경함으로써 코드가 더욱 간결해졌습니다.

다음과 같은 추가 개선사항을 고려해보시면 좋을 것 같습니다:

-        return recruitScrapList.stream()
-            .map(RecruitScrapConverter::toRecruitScrapResponseDTO)
-            .toList();
+        return recruitScrapList.stream()
+            .map(RecruitScrapConverter::toRecruitScrapResponseDTO)
+            .toUnmodifiableList();  // 불변 리스트 반환으로 안전성 향상
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between ac0e0da and 9fc6d01.

📒 Files selected for processing (7)
  • src/main/java/UMC/career_mate/domain/recruit/converter/RecruitConverter.java (1 hunks)
  • src/main/java/UMC/career_mate/domain/recruit/dto/response/RecommendRecruitsDTO.java (1 hunks)
  • src/main/java/UMC/career_mate/domain/recruit/service/RecruitQueryService.java (1 hunks)
  • src/main/java/UMC/career_mate/domain/recruitScrap/RecruitScrap.java (1 hunks)
  • src/main/java/UMC/career_mate/domain/recruitScrap/converter/RecruitScrapConverter.java (1 hunks)
  • src/main/java/UMC/career_mate/domain/recruitScrap/dto/response/RecruitScrapResponseDTO.java (1 hunks)
  • src/main/java/UMC/career_mate/domain/recruitScrap/service/RecruitScrapQueryService.java (1 hunks)
✅ Files skipped from review due to trivial changes (2)
  • src/main/java/UMC/career_mate/domain/recruit/dto/response/RecommendRecruitsDTO.java
  • src/main/java/UMC/career_mate/domain/recruit/service/RecruitQueryService.java
🔇 Additional comments (3)
src/main/java/UMC/career_mate/domain/recruitScrap/dto/response/RecruitScrapResponseDTO.java (1)

12-13: 필드 이름 변경 및 새로운 필드 추가가 적절히 이루어졌습니다.

isScraped에서 isScrapped로의 이름 변경이 일관성 있게 적용되었으며, jobName 필드가 적절히 추가되었습니다.

src/main/java/UMC/career_mate/domain/recruitScrap/converter/RecruitScrapConverter.java (1)

20-28: DTO 변환 로직이 개선되었습니다.

RecruitScrap 엔티티를 직접 사용하도록 변경되어 코드가 더 명확해졌습니다.

src/main/java/UMC/career_mate/domain/recruit/converter/RecruitConverter.java (1)

63-70: 변수명 변경이 일관성 있게 적용되었습니다.

isScraped에서 isScrapped로의 이름 변경이 메서드 시그니처와 구현부에 모두 적절히 반영되었습니다.

@JoinColumn(name = "recruit_id")
private Recruit recruit;

private String jobName;
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

jobName 필드에 제약 조건 추가 필요

jobName 필드에 대한 길이 제한이나 null 허용 여부 등의 제약 조건이 명시되어 있지 않습니다.

다음과 같이 제약 조건을 추가하는 것을 권장합니다:

-    private String jobName;
+    @Column(name = "job_name", nullable = false, length = 100)
+    private String jobName;
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
private String jobName;
@Column(name = "job_name", nullable = false, length = 100)
private String jobName;

return RecruitScrap.builder()
.member(member)
.recruit(recruit)
.jobName(member.getJob().getName())
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

member.getJob()에 대한 null 체크 필요

member.getJob()이 null을 반환할 경우 NullPointerException이 발생할 수 있습니다.

다음과 같이 수정하는 것을 권장합니다:

-            .jobName(member.getJob().getName())
+            .jobName(member.getJob() != null ? member.getJob().getName() : null)
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
.jobName(member.getJob().getName())
.jobName(member.getJob() != null ? member.getJob().getName() : null)

Copy link
Member

@jjeongdong jjeongdong left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants