Skip to content

활동 지표 현재 학기 집계 정확도 및 예외 처리 개선#195

Merged
zionhann merged 2 commits intoHandongSF:mainfrom
zionhann:fix-activity-metrics-term-members
Mar 9, 2026
Merged

활동 지표 현재 학기 집계 정확도 및 예외 처리 개선#195
zionhann merged 2 commits intoHandongSF:mainfrom
zionhann:fix-activity-metrics-term-members

Conversation

@zionhann
Copy link
Copy Markdown
Member

@zionhann zionhann commented Feb 26, 2026

  • 현재 학기 활동 인원 집계 기준을 학기 배정 신청자 수로 변경했습니다.

    기존 집계는 역할 정보에 기대고 있어 현재 학기 실제 참여 인원을 정확히 보여주지 못할 수 있었습니다. 이번 변경으로 현재 학기에 배정된 신청자 수를 기준으로 집계해 지표의 의미를 더 명확하게 맞췄습니다. 사용자에게 노출되는 활동 지표가 실제 운영 데이터와 더 잘 일치하도록 정합성을 높이기 위한 조정입니다.

  • 현재 학기 미설정 상황을 전용 도메인 예외로 처리하도록 수정했습니다.

    이전에는 일반 RuntimeException이 발생해 API 계층에서 예외 의도가 충분히 드러나지 않았습니다. NoCurrentTermFoundException을 사용하도록 바꾸면서 기존 예외 처리 흐름 안에서 일관된 응답을 만들 수 있게 했습니다. 현재 학기 설정 누락이라는 도메인 문제를 더 분명하게 표현해 장애 분석과 클라이언트 대응을 쉽게 하려는 목적입니다.

  • 학기 기준 신청자 수 조회를 위한 저장소 계약과 구현을 추가했습니다.

    서비스 계층이 필요한 집계값을 직접 계산하거나 우회 조회하지 않도록 저장소 책임을 명확히 분리했습니다. StudyApplicantRepository에 전용 조회 메서드를 추가하고 JPA 및 테스트용 구현체까지 함께 맞춰 동작 경로를 일치시켰습니다. 실제 환경과 테스트 환경에서 같은 기준으로 데이터를 조회하도록 해 변경의 신뢰성을 확보했습니다.

  • 활동 지표 서비스와 저장소 테스트를 보강했습니다.

    집계 기준이 바뀌는 수정은 수치 회귀가 발생하기 쉬워 검증 범위를 함께 넓히는 것이 필요했습니다. 서비스 테스트와 저장소 테스트를 추가로 보강해 현재 학기 집계와 예외 처리 동작을 함께 확인하도록 구성했습니다. 이번 변경 이후에도 관련 로직을 안전하게 수정할 수 있도록 회귀 방지 장치를 강화했습니다.

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Feb 26, 2026

📝 Walkthrough

Walkthrough

배정된 신청자 수를 조회하는 새로운 메서드를 리포지토리 계층에 추가하고, ActivityMetricsService에서 기존의 Role 기반 멤버 카운팅 로직을 배정된 신청자 기반 로직으로 변경했습니다. 관련 테스트를 추가했습니다.

Changes

Cohort / File(s) Summary
Repository 인터페이스 및 구현
src/main/java/edu/handong/csee/histudy/repository/StudyApplicantRepository.java, src/main/java/edu/handong/csee/histudy/repository/impl/StudyApplicationRepositoryImpl.java, src/main/java/edu/handong/csee/histudy/repository/jpa/JpaStudyApplicantRepository.java
배정된 신청자 수를 조회하는 countAssignedApplicants(AcademicTerm currentTerm) 메서드를 인터페이스, 구현 클래스, JPA 리포지토리에 추가했습니다. JPA 버전에는 현재 학기에서 studyGroup이 null이 아닌 StudyApplicant 레코드만 카운팅하는 @Query가 포함됩니다.
Service 계층
src/main/java/edu/handong/csee/histudy/service/ActivityMetricsService.java
StudyApplicantRepository 의존성을 추가하고, 현재 학기 멤버 수 계산 로직을 Role.MEMBER 카운팅에서 배정된 신청자 카운팅으로 변경했습니다. 또한 studyReportRepository를 사용하여 현재 학기의 보고서 수를 카운팅하는 로직을 추가했습니다.
Repository 테스트
src/test/java/edu/handong/csee/histudy/repository/StudyApplicantRepositoryTest.java
배정신청자수조회시_현재학기배정인원만반환() 테스트 메서드를 추가하여 countAssignedApplicants()가 현재 학기의 배정된 신청자만 반환하는지 검증합니다.
Service 테스트
src/test/java/edu/handong/csee/histudy/service/ActivityMetricsServiceTest.java
ActivityMetricsServiceTest 클래스를 새로 추가하여 전체 학기 지표 조회, 현재 학기 지표 조회(배정인원 기준), 현재 학기 없을 때 예외 발생 등 세 가지 시나리오를 Mockito로 테스트합니다.
Test 가짜 리포지토리
src/test/java/edu/handong/csee/histudy/service/repository/fake/FakeStudyApplicationRepository.java
FakeStudyApplicationRepository에 countAssignedApplicants(AcademicTerm currentTerm) 메서드를 추가하여 주어진 학기에 배정된 신청자의 수를 반환합니다.
🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed 제목이 주요 변경 사항을 명확히 반영하고 있습니다: 현재 학기 활동 지표 집계의 정확도 개선 및 예외 처리 개선.
Description check ✅ Passed PR 설명이 변경 사항과 명확히 관련되어 있으며, 구체적인 목표를 설명합니다.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Tip

Try Coding Plans. Let us write the prompt for your AI agent so you can ship faster (with fewer bugs).
Share your feedback on Discord.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@gemini-code-assist
Copy link
Copy Markdown

Summary of Changes

Hello @zionhann, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

이 PR은 현재 학기 활동 지표의 정확도를 높이고 예외 처리 방식을 개선하는 데 중점을 둡니다. 스터디 멤버 수 집계 로직을 실제 배정된 신청자 기준으로 변경하여 데이터의 신뢰성을 확보하고, 현재 학기 부재 시 발생하는 예외를 특정 예외 타입으로 통일하여 API 응답의 일관성을 향상시켰습니다. 또한, 관련 리포지토리 기능과 테스트를 보강하여 시스템의 안정성을 강화했습니다.

Highlights

  • 활동 지표 집계 로직 개선: 현재 학기 활동 지표의 스터디 멤버 집계 방식을 Role 기반에서 학기 배정 신청자 수 기반으로 변경하여 실제 참여 인원을 더 정확하게 반영했습니다.
  • 예외 처리 개선: 현재 학기 정보가 없을 경우 RuntimeException 대신 NoCurrentTermFoundException을 발생시키도록 수정하여 공개 API 예외 응답을 기존 도메인 예외 처리 흐름과 일치시켰습니다.
  • StudyApplicantRepository 기능 추가: StudyApplicantRepository에 countAssignedApplicants 쿼리와 JPA 및 가짜 구현체를 추가하여 학기 기준 집계를 명확하고 일관되게 조회할 수 있도록 했습니다.
  • 테스트 코드 강화: ActivityMetricsService 및 StudyApplicantRepository에 대한 테스트 코드를 추가 및 보강하여 집계 로직의 회귀를 방지하고 변경 사항의 신뢰도를 높였습니다.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Changelog
  • src/main/java/edu/handong/csee/histudy/repository/StudyApplicantRepository.java
    • countAssignedApplicants 메서드가 추가되었습니다.
  • src/main/java/edu/handong/csee/histudy/repository/impl/StudyApplicationRepositoryImpl.java
    • countAssignedApplicants 메서드의 구현체가 추가되었습니다.
  • src/main/java/edu/handong/csee/histudy/repository/jpa/JpaStudyApplicantRepository.java
    • countAssignedApplicants를 위한 JPA 쿼리가 추가되었습니다.
  • src/main/java/edu/handong/csee/histudy/service/ActivityMetricsService.java
    • 스터디 멤버 수 집계 로직이 studyApplicantRepository를 사용하도록 변경되었습니다.
    • 현재 학기 부재 시 NoCurrentTermFoundException을 발생시키도록 수정되었습니다.
    • StudyApplicantRepository 의존성이 추가되었습니다.
  • src/test/java/edu/handong/csee/histudy/repository/StudyApplicantRepositoryTest.java
    • countAssignedApplicants 메서드의 동작을 검증하는 테스트 케이스가 추가되었습니다.
  • src/test/java/edu/handong/csee/histudy/service/ActivityMetricsServiceTest.java
    • ActivityMetricsService의 활동 지표 조회 로직을 테스트하는 새로운 테스트 파일이 추가되었습니다.
  • src/test/java/edu/handong/csee/histudy/service/repository/fake/FakeStudyApplicationRepository.java
    • 가짜 구현체에 countAssignedApplicants 메서드가 추가되었습니다.
Activity
  • 현재까지 기록된 활동은 없습니다.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Copy Markdown

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

안녕하세요. 활동 지표 집계 로직 개선과 예외 처리 수정에 대한 PR 잘 보았습니다.

전반적으로 변경 사항이 명확하고, PR의 목적에 맞게 잘 구현되었습니다.

  • 현재 학기 참여 인원 집계 방식을 StudyApplicant 기준으로 변경하여 정확도를 높인 점이 좋습니다.
  • RuntimeException을 구체적인 NoCurrentTermFoundException으로 대체하여 예외 처리 흐름을 개선한 것도 좋은 변경입니다.
  • 새로운 로직에 대한 테스트 케이스를 ActivityMetricsServiceTestStudyApplicantRepositoryTest에 충실하게 추가하여 코드의 신뢰성을 높여주셨습니다.

몇 가지 코드 개선 제안을 리뷰 코멘트로 남겼습니다. 주로 테스트 코드의 가독성과 간결성을 높이기 위한 제안입니다. 확인 부탁드립니다.

@zionhann zionhann merged commit 0329e48 into HandongSF:main Mar 9, 2026
2 checks passed
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.

1 participant