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

[Feat: 298] 2024년도의 컨트리뷰터 필터링 #305

Merged
merged 19 commits into from
Jun 3, 2024

Conversation

rhkrwngud445
Copy link
Contributor

@rhkrwngud445 rhkrwngud445 commented May 28, 2024

Issue

Overview (Required)

안녕하세요! 좋은 기회 주셔서 감사합니다.
구현을 해보았으나, API 활용에 있어 어려운 점이 있어 좋은 방법이 있는지 궁금합니다!

  • 어려운 점: Contributor API에서 날짜 관련 정보 제공을 안하는 것으로 보입니다. 🥲

현재 구현방식

Contributer의 이름을 가지고 Commit Api를 호출합니다
여기서 마지막 커밋 날짜(Author 기준)가 2024년이 넘어갔을 때 UI에 보여줄 리스트로 담았습니다.

구현의 문제점

Rate Limit 정책에 걸려, 시간내 60번 연속 호출시 IP 블로킹 당합니다..😂

생각한 해결 방안

  1. API 호출을 로컬에 캐싱하여, 데이터가 있을 시 로컬 데이터를 불러옵니다 + OAuth Token Header를 사용하여 Rate Limit를 늘립니다..
  2. /commit API를 통해 2024년 Commit 데이터 전체를 순회합니다. 이를 앱단에서 필터링을 합니다. (API에 페이징 적용되어있는데, 한 번에 100개까지 호출 가능합니다)

우회적으로 구현한 것 같아 개인적으로 조금 아쉬운 방안입니다. 혹시 추가적인 개선 방법이나, 다른 좋은 방안이 있는지 궁금합니다..!

Ref API Link

Github Commits API
Github Contributor API


Update On 05/29 16:57

Json 파일에 연도별로 기여자를 분류하여 필터링 기능을 구현하였습니다!

  • Contributor Model: contributionYears 속성을 추가하였습니다
  • ContributorRepository: 기존 Github API에서 로컬 Json의 years를 합쳐 Contributor Model를 리턴합니다
    • 로컬 Json 파일에 기여자가 없는 경우 (최신 데이터 미반영된 경우) 기여연도들을 empty list로 처리합니다
  • UseCase: 연도별로 필터링합니다

Lastest Update

Usecase에서 필터 로직 구현

  • 로컬 Json 파일의 기여한 연도들을 불러와 마지막 연도에 해당하는 기여자 조회
    • 로컬 Json에 없지만 Contribute API에 있는 경우, 올해 기여자로 구분

Copy link

github-actions bot commented May 28, 2024

Test Results

18 tests   18 ✅  5s ⏱️
11 suites   0 💤
11 files     0 ❌

Results for commit 34cbacb.

♻️ This comment has been updated with latest results.

@taehwandev
Copy link
Member

taehwandev commented May 29, 2024

이 구현 부분은 이렇게 생각했습니다.
2023/2024 둘다에 참여한 분들도 있을거구요. 앱은 년도별로 앞으로 지속 관리 예정입니다.
별도의 json 리스트를 하나 더 추가하고, 2023/2024 타겟을 관리합니다.(고유값만), 이와 API를 조합해서 클라에 노출하는 정도로 생각했습니다.

  • 장점
    연도별 데이터 모두 노출 가능
    (섹션 형태로 연도, 참여자 구분)

  • 단점
    년도별로 새로운 사람을 리스트에 필터 추가

cc. @laco-dev @wisemuji @KimReady

@rhkrwngud445
Copy link
Contributor Author

rhkrwngud445 commented May 29, 2024

의견 주셔서 감사합니다 가장 좋은 방법인 것 같습니다!
2023 기여자만 필터링을 하고 else로 올해 기여자를 구분해보겠습니다! (contributor API 실시간성 반영)

말씀주신 단점으로, 현재 수작업으로 가능한정도이고 ,추후 API Json 추출 도구를 만들어 어느정도 자동화를 할 수 있을 것 같습니다!

2023
]
}
]
Copy link
Member

Choose a reason for hiding this comment

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

👍 결국 직접 다 뽑으셨군요. 감사합니다.

@@ -5,6 +5,7 @@ import kotlinx.serialization.Serializable

@Serializable
internal data class ContributorResponse(
val id: Long,
Copy link
Member

Choose a reason for hiding this comment

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

동일하게 @SerialName을 지정해주세요.

@Serializable
data class ContributionYearResponse(
val id: Long,
val years: List<Int>,
Copy link
Member

Choose a reason for hiding this comment

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

@SerialName을 지정해주는게 좋을것 같네요.

@@ -7,11 +7,17 @@ import javax.inject.Inject
class GetContributorsUseCase @Inject constructor(
private val repository: ContributorRepository,
) {
suspend operator fun invoke(): List<Contributor> {
suspend operator fun invoke(year: Int = 2024): List<Contributor> {
Copy link
Member

Choose a reason for hiding this comment

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

매년 변경해야할 데이터로 보여서 기본값을 2024로 지정하는건 의미가 없을것 같네요.

2023 -> contributor.contributionYears.contains(year)
else -> contributor.contributionYears.contains(year)
|| contributor.contributionYears.isEmpty()
}
Copy link
Member

Choose a reason for hiding this comment

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

isEmpty()를 체크할 이유가 있을까요?
연도가 증가하면 이 부분 역시 지속 수정이 되어야 할것 같아보입니다.
현재 코드가 어떤 필터를 하는 것인지 이해가 어렵기도하구요.

Copy link
Contributor Author

@rhkrwngud445 rhkrwngud445 May 30, 2024

Choose a reason for hiding this comment

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

계속 수정되어야 하는 건 분명 좋지 못한 것 같습니다!

로컬 json에 어떤 연도들이 있는지 확인하여, 마지막 해(올해)를 기준으로 기여자를 조회하도록 변경하였습니다!
따라서 파라미터 기본값 코멘트에서 함수 파라미터 또한 제거하였습니다!

@taehwandev taehwandev merged commit d337c14 into droidknights:main Jun 3, 2024
2 checks passed
@taehwandev taehwandev added the 2024 label Jun 3, 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.

[컨트리뷰터] 2024년도의 컨트리뷰터 필터링이 필요합니다.
2 participants