Skip to content

Conversation

@rlajm1203
Copy link
Contributor

@rlajm1203 rlajm1203 commented Sep 24, 2025

📌 관련 이슈

✒️ 작업 내용

  • Semester 조회 엔드포인트 URI 수정

스크린샷 🏞️ (선택)

💬 REVIEWER에게 요구사항 💬

Summary by CodeRabbit

  • 신기능
    • 관리자용 출결 통계 API 추가: 페이지네이션, 재직상태 및 기간 필터 지원. 통계 응답 포맷 제공.
  • 보안
    • 출결 통계 조회(GET /api/attend/statistic)는 관리자 권한 필요.
  • 변경
    • 학기 기간 조회 경로를 /semester-periods에서 /admin/semester-periods로 변경.
  • 리팩터링
    • 출결/발표/팀빌딩/가중치/랭크 관련 패키지 구조 재정비 및 내부 의존성 정리.
  • 테스트
    • 패키지 경로 변경에 맞춰 테스트 코드 업데이트.

@coderabbitai
Copy link

coderabbitai bot commented Sep 24, 2025

Caution

Review failed

The pull request is closed.

Walkthrough

  • 관리자용 출석 통계 API 추가(/api/attend/statistic)와 보안 매칭 규칙 신설
  • 학기 기간 조회 경로를 /semester-periods → /admin/semester-periods로 변경
  • 통계 DTO/Usecase/Service/Repository 쿼리 추가
  • persistence 패키지 구조를 presentation/rank/teambuilding/policy 하위로 재배치 및 관련 import 정리

Changes

Cohort / File(s) Summary
Security & Admin 경로
eeos/.../config/security/SecurityFilterChainConfig.java, eeos/.../program/presentation/controller/SemesterPeriodController.java
GET /api/attend/statistic에 ADMIN 권한 요구 추가; 학기기간 GET 경로를 /admin/semester-periods로 변경
출석 통계 API (신규 기능)
eeos/.../target/presentation/controller/AttendController.java, eeos/.../target/presentation/docs/AttendApi.java, eeos/.../target/application/usecase/GetAttendantInfoUsecase.java, eeos/.../target/application/service/AttendService.java, eeos/.../target/persistence/AttendRepository.java, eeos/.../target/application/dto/AttendStatisticsResponse.java
/attend/statistic 엔드포인트 추가, Usecase/Service 메서드 추가, 통계 DTO 신설, 페이징 JPQL 통계 쿼리 2종 추가
TeamBuilding 패키지 재배치
eeos/.../target/persistence/teambuilding/*, eeos/.../target/application/model/TeamBuildingTargetModel.java, eeos/.../target/application/model/converter/TeamBuildingTargetEntityConverter.java, eeos/.../target/application/service/AttendTeamBuildingService.java, eeos/.../teamBuilding/application/service/CommandTeamBuildingTargetMemberService.java, eeos/.../teamBuilding/application/event/DeletedTeamBuildingEventListener.java, eeos/.../target/application/service/QueryTeamBuildingTargetService.java, eeos/.../test/...SelectTeamBuildingCommandTargetMemberServiceTest.java
teambuilding 관련 Entity/Repository를 하위 패키지로 이동, 이에 따른 import 경로 수정
Presentation 패키지 재배치
eeos/.../target/persistence/presentation/*, eeos/.../target/persistence/converter/PresentationConverter.java, eeos/.../target/application/service/TeamPresentService.java
PresentationEntity/Repository를 presentation 하위 패키지로 이동 및 관련 import 갱신
Rank 패키지 재배치
eeos/.../target/persistence/rank/*, eeos/.../target/application/service/AttendService.java
ProgramRankCounter 엔티티/레포지토리를 rank 하위 패키지로 이동, 서비스 import 수정
AttendWeight 정책 리포지토리 이동
eeos/.../target/application/repository/AttendWeightPolicyRepository.java, eeos/.../target/application/service/AttendWeightCalculator.java, eeos/.../target/application/service/AttendWeightPolicyService.java, eeos/.../target/persistence/policy/*, eeos/.../test/.../AttendWeightPolicyServiceTest.java
AttendWeightPolicyRepository를 application.repository로 이동, policy 엔티티/구현/JPA 레포지토리 패키지 변경 및 관련 import 정리
기타 경로 정리
eeos/.../team/application/Service/TeamService.java
경로(import) 정리만 수행

Sequence Diagram(s)

sequenceDiagram
    autonumber
    actor Admin as Admin Client
    participant Sec as SecurityFilterChain
    participant C as AttendController
    participant U as GetAttendantInfoUsecase
    participant S as AttendService
    participant R as AttendRepository
    note over Admin,S: 출석 통계 조회 (page,size,activeStatus,startDate,endDate)

    Admin->>Sec: GET /api/attend/statistic
    Sec-->>Admin: 401/403 if not ROLE_ADMIN
    Sec->>C: Authorized request
    C->>U: getStatistics(page,size,activeStatus,startDate,endDate)
    U->>S: delegate
    S->>S: 날짜 범위 계산(입력 or 학기기간)
    alt activeStatus 제공
        S->>R: getStatistics(start,end,LATE,ABSENT,activeStatus, pageable)
    else 미제공
        S->>R: getStatistics(start,end,LATE,ABSENT, pageable)
    end
    R-->>S: Page<Object[]>
    S->>S: MemberStatistics로 매핑, 정렬/페이징 유지
    S-->>U: PageResponse<MemberStatistics>
    U-->>C: PageResponse<MemberStatistics>
    C-->>Admin: 200 OK, ApiResponse(SuccessBody)
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

Suggested labels

bug

Suggested reviewers

  • Daae-Kim
  • kssumin

Poem

새벽 로그에 발을 톡— 통계가 톡톡 튀네!
ADMIN 열쇠로 문을 활짝, 숫자들은 줄을 서고,
학기 길도 admin 쪽, 토끼는 길을 잘 아네.
패키지 굴로 이사도 척척,
오늘도 깡총— 데이터 당근 수확 완료! 🥕🗂️

✨ Finishing touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch BM/feat/#285/attend-statistics

📜 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 ab037d9 and dcb2612.

📒 Files selected for processing (33)
  • eeos/src/main/java/com/blackcompany/eeos/config/security/SecurityFilterChainConfig.java (1 hunks)
  • eeos/src/main/java/com/blackcompany/eeos/program/presentation/controller/SemesterPeriodController.java (1 hunks)
  • eeos/src/main/java/com/blackcompany/eeos/target/application/dto/AttendStatisticsResponse.java (1 hunks)
  • eeos/src/main/java/com/blackcompany/eeos/target/application/model/TeamBuildingTargetModel.java (1 hunks)
  • eeos/src/main/java/com/blackcompany/eeos/target/application/model/converter/TeamBuildingTargetEntityConverter.java (1 hunks)
  • eeos/src/main/java/com/blackcompany/eeos/target/application/repository/AttendWeightPolicyRepository.java (1 hunks)
  • eeos/src/main/java/com/blackcompany/eeos/target/application/service/AttendService.java (3 hunks)
  • eeos/src/main/java/com/blackcompany/eeos/target/application/service/AttendTeamBuildingService.java (1 hunks)
  • eeos/src/main/java/com/blackcompany/eeos/target/application/service/AttendWeightCalculator.java (1 hunks)
  • eeos/src/main/java/com/blackcompany/eeos/target/application/service/AttendWeightPolicyService.java (1 hunks)
  • eeos/src/main/java/com/blackcompany/eeos/target/application/service/QueryTeamBuildingTargetService.java (1 hunks)
  • eeos/src/main/java/com/blackcompany/eeos/target/application/service/TeamPresentService.java (1 hunks)
  • eeos/src/main/java/com/blackcompany/eeos/target/application/usecase/GetAttendantInfoUsecase.java (2 hunks)
  • eeos/src/main/java/com/blackcompany/eeos/target/persistence/AttendRepository.java (2 hunks)
  • eeos/src/main/java/com/blackcompany/eeos/target/persistence/converter/PresentationConverter.java (1 hunks)
  • eeos/src/main/java/com/blackcompany/eeos/target/persistence/policy/AttendWeightPolicyEntity.java (1 hunks)
  • eeos/src/main/java/com/blackcompany/eeos/target/persistence/policy/AttendWeightPolicyRepositoryImpl.java (1 hunks)
  • eeos/src/main/java/com/blackcompany/eeos/target/persistence/policy/JpaWeightPolicyRepository.java (1 hunks)
  • eeos/src/main/java/com/blackcompany/eeos/target/persistence/presentation/PresentationEntity.java (1 hunks)
  • eeos/src/main/java/com/blackcompany/eeos/target/persistence/presentation/PresentationRepository.java (1 hunks)
  • eeos/src/main/java/com/blackcompany/eeos/target/persistence/rank/ProgramRankCounterEntity.java (1 hunks)
  • eeos/src/main/java/com/blackcompany/eeos/target/persistence/rank/ProgramRankCounterRepository.java (1 hunks)
  • eeos/src/main/java/com/blackcompany/eeos/target/persistence/teambuilding/TeamBuildingInputDataEntity.java (1 hunks)
  • eeos/src/main/java/com/blackcompany/eeos/target/persistence/teambuilding/TeamBuildingInputStatus.java (1 hunks)
  • eeos/src/main/java/com/blackcompany/eeos/target/persistence/teambuilding/TeamBuildingTargetEntity.java (1 hunks)
  • eeos/src/main/java/com/blackcompany/eeos/target/persistence/teambuilding/TeamBuildingTargetRepository.java (1 hunks)
  • eeos/src/main/java/com/blackcompany/eeos/target/presentation/controller/AttendController.java (2 hunks)
  • eeos/src/main/java/com/blackcompany/eeos/target/presentation/docs/AttendApi.java (2 hunks)
  • eeos/src/main/java/com/blackcompany/eeos/team/application/Service/TeamService.java (1 hunks)
  • eeos/src/main/java/com/blackcompany/eeos/teamBuilding/application/event/DeletedTeamBuildingEventListener.java (1 hunks)
  • eeos/src/main/java/com/blackcompany/eeos/teamBuilding/application/service/CommandTeamBuildingTargetMemberService.java (1 hunks)
  • eeos/src/test/java/com/blackcompany/eeos/target/application/service/AttendWeightPolicyServiceTest.java (1 hunks)
  • eeos/src/test/java/com/blackcompany/eeos/target/application/service/SelectTeamBuildingCommandTargetMemberServiceTest.java (1 hunks)

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.

@rlajm1203 rlajm1203 closed this Sep 24, 2025
@coderabbitai coderabbitai bot added the bug Something isn't working label Sep 24, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants