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

[IDLE-509] 크롤링 전체 조회 시, 공고가 중복 노출되는 현상 해결 #235

Merged
merged 3 commits into from
Nov 9, 2024

Conversation

wonjunYou
Copy link
Contributor

@wonjunYou wonjunYou commented Nov 9, 2024

1. 📄 Summary

  • 크롤링된 공고 전체 조회 API에서 간헐적으로 같은 공고가 두번 이상 조회되는 문제가 발생하였습니다.
  • 즐겨찾기 내역에 대한 유저별 필터를 위해 where 조건절을 추가하였습니다.
  • 공고 탐색 반경을 기존 3km에서 5km로 변경 조치하였습니다.

Summary by CodeRabbit

  • 새로운 기능

    • 구직 게시물 검색 시, 보호자 ID를 기반으로 필터링 기능 추가.
    • 인증된 사용자의 위치 기반으로 거리 계산 개선.
  • 버그 수정

    • 날짜 파싱 로직 개선으로 신청 마감일 처리 강화.
  • 문서화

    • 메서드 시그니처 업데이트로 코드 가독성 향상.

@wonjunYou wonjunYou added the 🎯리팩토링 리팩토링 및 고도화 이슈 label Nov 9, 2024
@wonjunYou wonjunYou self-assigned this Nov 9, 2024
Copy link

coderabbitai bot commented Nov 9, 2024

Warning

Rate limit exceeded

@wonjunYou has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait 17 minutes and 44 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

📥 Commits

Reviewing files that changed from the base of the PR and between baca242 and 5700790.

Walkthrough

이 풀 리퀘스트에서는 CrawlingJobPostingService, JobPostingService, CarerJobPostingFacadeService, CrawlingJobPostingFacadeService, CrawlingJobPostingSpatialQueryRepository, 및 JobPostingSpatialQueryRepository 클래스의 메서드 시그니처가 변경되었습니다. 주요 변경 사항은 findAllByCarerLocationInRange 및 관련 메서드에서 Carer 객체 대신 carerId: UUID를 사용하여 카서를 식별하도록 수정된 것입니다. 또한, 날짜 파싱 및 거리 계산 로직이 개선되었습니다.

Changes

파일 경로 변경 요약
idle-application/src/main/kotlin/com/swm/idle/application/jobposting/domain/CrawlingJobPostingService.kt findAllByCarerLocationInRange 메서드에 carerId: UUID 매개변수 추가.
idle-application/src/main/kotlin/com/swm/idle/application/jobposting/domain/JobPostingService.kt findAllByCarerLocationInRange 메서드에서 carer 매개변수를 carerId: UUID로 변경. update, updateWithoutAddress, create 메서드에서 applyDeadline 파라미터 날짜 파싱 추가.
idle-application/src/main/kotlin/com/swm/idle/application/jobposting/facade/CarerJobPostingFacadeService.kt scrollByCarerLocationInRangescrollByCarerApplyHistory 메서드에서 carer 객체 대신 carerId 사용.
idle-application/src/main/kotlin/com/swm/idle/application/jobposting/facade/CrawlingJobPostingFacadeService.kt scrollByCarerLocationInRange 메서드에 인증된 사용자의 carer 정보를 가져오는 로직 추가.
idle-domain/src/main/kotlin/com/swm/idle/domain/jobposting/repository/querydsl/CrawlingJobPostingSpatialQueryRepository.kt findAllInRange 메서드에 carerId: UUID 매개변수 추가 및 조인 조건 수정.
idle-domain/src/main/kotlin/com/swm/idle/domain/jobposting/repository/querydsl/JobPostingSpatialQueryRepository.kt findAllWithWeekdaysInRange 메서드에서 carer 매개변수를 carerId: UUID로 변경.

Possibly related PRs

Suggested labels

🛠️버그


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>, 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 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.

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

🧹 Outside diff range and nitpick comments (2)
idle-domain/src/main/kotlin/com/swm/idle/domain/jobposting/repository/querydsl/CrawlingJobPostingSpatialQueryRepository.kt (1)

45-49: 중복 공고 문제를 해결하기 위한 조인 조건이 개선되었습니다.

carerId를 기준으로 한 조인 조건 추가는 사용자별 즐겨찾기를 정확하게 필터링할 수 있게 해줍니다. 하지만 성능 최적화를 위해 다음 사항을 고려해보시기 바랍니다:

  • 인덱스 활용 여부 확인
  • 대량의 데이터 처리 시 페이징 성능
idle-application/src/main/kotlin/com/swm/idle/application/jobposting/facade/CarerJobPostingFacadeService.kt (1)

109-109: 매개변수 변경이 적절하게 이루어졌습니다.

Carer 객체 전체 대신 carerId만 전달하도록 변경한 것은 다음과 같은 이점이 있습니다:

  • 중복 공고 필터링을 위한 PR 목적에 부합
  • 불필요한 데이터 전달 최소화
  • 다른 서비스 레이어와의 일관성 유지

다만, carerId가 유효하지 않은 경우에 대한 명시적인 예외 처리를 추가하면 좋을 것 같습니다:

 val jobPostingPreviewDtos = jobPostingService.findAllByCarerLocationInRange(
     carerId = carer.id,
+    .takeIf { it != null }
+    ?.let {
     location = location,
     next = next,
     limit = limit + 1,
+ } ?: throw IllegalArgumentException("유효하지 않은 carer ID입니다.")
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between 1a442a5 and baca242.

📒 Files selected for processing (6)
  • idle-application/src/main/kotlin/com/swm/idle/application/jobposting/domain/CrawlingJobPostingService.kt (1 hunks)
  • idle-application/src/main/kotlin/com/swm/idle/application/jobposting/domain/JobPostingService.kt (1 hunks)
  • idle-application/src/main/kotlin/com/swm/idle/application/jobposting/facade/CarerJobPostingFacadeService.kt (1 hunks)
  • idle-application/src/main/kotlin/com/swm/idle/application/jobposting/facade/CrawlingJobPostingFacadeService.kt (1 hunks)
  • idle-domain/src/main/kotlin/com/swm/idle/domain/jobposting/repository/querydsl/CrawlingJobPostingSpatialQueryRepository.kt (3 hunks)
  • idle-domain/src/main/kotlin/com/swm/idle/domain/jobposting/repository/querydsl/JobPostingSpatialQueryRepository.kt (3 hunks)
🔇 Additional comments (8)
idle-application/src/main/kotlin/com/swm/idle/application/jobposting/domain/CrawlingJobPostingService.kt (2)

32-36: 메서드 시그니처 변경이 적절해 보입니다.

carerId 매개변수를 추가함으로써 사용자별 맞춤형 필터링이 가능해졌습니다. 이는 공고 중복 노출 문제를 해결하는데 도움이 될 것으로 보입니다.


Line range hint 38-42: Repository 호출 부분이 올바르게 수정되었습니다.

findAllInRange 메서드 호출 시 carerId를 전달하도록 변경된 것이 확인됩니다. 이는 상위 메서드의 변경사항과 일관성있게 구현되었습니다.

다음 스크립트를 실행하여 Repository 계층에서도 올바르게 구현되었는지 확인해보겠습니다:

✅ Verification successful

Repository 계층의 구현이 올바르게 되어있음을 확인했습니다.

CrawlingJobPostingSpatialQueryRepositoryfindAllInRange 메서드에서 carerId 파라미터가 다음과 같이 올바르게 처리되고 있습니다:

  • 메서드 시그니처에 carerId: UUID 파라미터가 추가됨
  • jobPostingFavorite 테이블과의 조인 조건에서 carerId를 정확히 사용
  • 즐겨찾기 상태 확인 시 해당 carerId의 데이터만 참조
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Repository 구현체에서 carerId 파라미터가 올바르게 처리되는지 확인

# Test: CrawlingJobPostingSpatialQueryRepository의 findAllInRange 메서드 구현 확인
ast-grep --pattern 'fun findAllInRange($$$carerId: UUID$$$)'

Length of output: 62


Script:

#!/bin/bash
# Repository 구현체에서 findAllInRange 메서드의 구현을 확인
rg -A 5 "fun findAllInRange" --type kotlin

# 관련 인터페이스 정의도 확인
rg -A 5 "interface.*Repository.*" --type kotlin | grep -A 5 "findAllInRange"

Length of output: 1017


Script:

#!/bin/bash
# Repository 구현체의 전체 내용을 확인하여 carerId 파라미터가 올바르게 사용되는지 검증
cat idle-domain/src/main/kotlin/com/swm/idle/domain/jobposting/repository/querydsl/CrawlingJobPostingSpatialQueryRepository.kt

# 관련 인터페이스 파일들도 확인
fd -e kt -E "test" -E "Test" . idle-domain/src/main/kotlin/com/swm/idle/domain/jobposting/repository/ -x cat {}

Length of output: 18315

idle-domain/src/main/kotlin/com/swm/idle/domain/jobposting/repository/querydsl/CrawlingJobPostingSpatialQueryRepository.kt (2)

22-25: 메서드 시그니처 변경이 적절해 보입니다.

carerId를 파라미터로 추가한 것은 사용자별 즐겨찾기 필터링을 위한 좋은 접근 방식입니다.


68-68: 버퍼 거리가 5000으로 증가된 이유를 확인해주세요.

버퍼 거리를 3000에서 5000으로 변경한 것이 검색 범위에 영향을 미칠 수 있습니다. 이 변경이 의도적인 것인지, 그리고 사용자 경험에 어떤 영향을 미칠지 검토가 필요합니다.

✅ Verification successful

Let me gather more information about the history of this change.


Let me check the commit message and PR description for the change from 3000 to 5000.


버퍼 거리 변경이 의도적으로 이루어졌음을 확인했습니다.

PR 설명에 따르면 공고 탐색 반경을 기존 3km에서 5km로 의도적으로 변경한 것이 확인되었습니다. 이는 PR의 Summary에 명시적으로 언급되어 있습니다.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: 버퍼 거리 변경과 관련된 이슈나 PR 설명을 검색합니다.

# Test: 버퍼 거리 관련 커밋 메시지나 PR 설명 검색
gh pr view 235 --json body | jq -r '.body' | grep -i "buffer\|distance\|5000\|범위"

# Test: 다른 파일에서도 비슷한 상수가 사용되는지 확인
rg "ST_BUFFER|5000|3000" --type kotlin

Length of output: 468


Script:

#!/bin/bash
# Check git history for changes to these files focusing on the buffer distance
git log -p -- idle-domain/src/main/kotlin/com/swm/idle/domain/jobposting/repository/querydsl/CrawlingJobPostingSpatialQueryRepository.kt idle-domain/src/main/kotlin/com/swm/idle/domain/jobposting/repository/querydsl/JobPostingSpatialQueryRepository.kt | grep -B 5 -A 5 "ST_BUFFER"

# Look for any related test files
fd "test" --type f --exec rg "ST_BUFFER|5000|3000" {}

Length of output: 2008


Script:

#!/bin/bash
# Get the commit message for the change
git log --grep="3000" --grep="5000" -i --pretty=format:"%h %s%n%b"

# Get PR description
gh pr view 235 --json title,body | jq -r '.title, .body'

Length of output: 675

idle-domain/src/main/kotlin/com/swm/idle/domain/jobposting/repository/querydsl/JobPostingSpatialQueryRepository.kt (3)

26-29: 매개변수 변경이 적절해 보입니다.

Carer 엔티티 대신 carerId를 사용하는 것은 다음과 같은 이점이 있습니다:

  • 불필요한 엔티티 조회 방지
  • 데이터베이스 조인 최소화
  • 메모리 사용량 감소

59-61: 중복 공고 문제 해결을 위한 조인 조건이 개선되었습니다.

applys.carerId.eq(carerId) 조건을 사용하여 특정 사용자의 지원 정보만 필터링하도록 수정된 것이 확인됩니다. 이는 PR의 주요 목적인 중복 공고 노출 문제를 해결하는데 도움이 될 것으로 보입니다.


88-88: 버퍼 거리 증가에 대한 검토가 필요합니다.

버퍼 거리가 3000에서 5000으로 증가된 것이 확인됩니다. 이는 검색 범위를 확장하는 변경사항입니다.

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

  • 이 변경이 의도적인 것인지
  • 성능에 미치는 영향은 어떠한지
  • 사용자 경험 측면에서 적절한 범위인지
idle-application/src/main/kotlin/com/swm/idle/application/jobposting/domain/JobPostingService.kt (1)

197-206: 메서드 시그니처 변경이 적절해 보입니다.

Carer 객체 대신 carerId를 사용하도록 변경한 것은 다음과 같은 이점이 있습니다:

  • 불필요한 객체 의존성 제거
  • 데이터 접근 계층과의 일관성 유지
  • 중복 공고 필터링을 위한 사용자별 즐겨찾기 기능 구현 용이

아래 스크립트를 실행하여 다른 서비스들의 호출부가 새로운 시그니처와 일치하는지 확인하겠습니다:

✅ Verification successful

메서드 시그니처 변경이 올바르게 적용되었습니다.

검증 결과, 모든 호출부가 새로운 시그니처를 사용하도록 정상적으로 수정되었습니다:

  • CarerJobPostingFacadeService에서 carer.id를 전달
  • CrawlingJobPostingFacadeService에서 carer.id를 전달
  • CrawlingJobPostingService에서도 동일한 시그니처로 구현
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify that all callers have been updated to use carerId
# Test: Search for method calls that might still use Carer object
rg "findAllByCarerLocationInRange.*Carer" 

# Test: Verify all callers are updated to use UUID
rg "findAllByCarerLocationInRange.*UUID"

Length of output: 86


Script:

#!/bin/bash
# Search for method name in all files
rg -A 3 "findAllByCarerLocationInRange" 

# Search for method definition
ast-grep --pattern 'fun findAllByCarerLocationInRange'

# Search for any references to the method name
rg "findAllByCarerLocationInRange" --type kotlin

Length of output: 3105

Copy link

sonarcloud bot commented Nov 9, 2024

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🎯리팩토링 리팩토링 및 고도화 이슈
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant