Skip to content

[FEAT] 연주 완료 이벤트 기반 통계 집계 연동 - #134

Merged
on1yoneprivate merged 7 commits into
developfrom
feat/#132-playing-completion-statistics
Aug 4, 2026
Merged

[FEAT] 연주 완료 이벤트 기반 통계 집계 연동#134
on1yoneprivate merged 7 commits into
developfrom
feat/#132-playing-completion-statistics

Conversation

@on1yoneprivate

@on1yoneprivate on1yoneprivate commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

📍 개요

MIDI 이벤트 저장 완료 후 PlayingCompletedEvent를 발행하여 기존 통계 이벤트 리스너와 연동하고,
연주 완료 시 사용자 통계가 갱신되도록 구현했습니다.

⛓️‍💥 관련 이슈


🛠️ 작업 내용

  • PlayingService.saveMidiEvents()에서 연주 완료 후 PlayingCompletedEvent 발행
  • 기존 StatisticsEventListener 및 StatisticsAggregationService와 연주 완료 이벤트 연동
  • 연습 마일스톤 알림 발행 로직을 publishPracticeMilestoneNotification() 메서드로 분리하여 가독성 개선
  • PlayingServiceTest를 현재 이벤트 발행 구조에 맞게 수정
  • 연주 완료 이벤트 발행 및 미발행(예외 상황) 테스트 추가

🔥 리뷰 요청 사항

리뷰어가 중점적으로 확인해주었으면 하는 내용을 작성해주세요.


✅ 체크리스트

  • 코드 컨벤션을 준수했습니다.
  • 불필요한 코드 및 import를 제거했습니다.
  • 예외 처리를 적용했습니다.
  • 테스트를 완료했습니다.
  • 관련 Issue를 연결했습니다.

📎 참고 사항

  • PR에서는 이벤트 발행 및 기존 통계 집계 로직과의 연동만 추가했으며, 통계 계산 로직 자체는 변경하지 않았습니다.
  • @ownue 적절히 설계되었는지 확인 부탁드립니다.

Summary by CodeRabbit

  • 새 기능

    • MIDI 저장 완료 후 연주 완료 알림이 발행됩니다.
    • 주간 연습 누적 시간과 현재 연주 시간을 기준으로 마일스톤 달성 알림이 제공됩니다.
  • 버그 수정

    • MIDI 저장 과정에서 권한, 진행 상태, 잘못된 ID 및 연주 미존재 상황의 이벤트 발행 동작을 명확히 검증했습니다.
  • 문서화

    • 녹음 파일 업로드 및 MIDI 저장 API의 설명이 더욱 구체화되었습니다.

@coderabbitai

coderabbitai Bot commented Aug 4, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 55f4f438-38c8-4ada-b99d-c7138298c322

📥 Commits

Reviewing files that changed from the base of the PR and between 1c34691 and 5dfef64.

📒 Files selected for processing (3)
  • src/main/java/com/mr/domain/playing/controller/PlayingController.java
  • src/test/java/com/mr/domain/playing/entity/PlayingTest.java
  • src/test/java/com/mr/domain/playing/service/PlayingServiceTest.java
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/test/java/com/mr/domain/playing/service/PlayingServiceTest.java

📝 Walkthrough

Walkthrough

saveMidiEvents가 MIDI 저장 완료 후 연습 마일스톤 알림과 PlayingCompletedEvent를 발행하도록 변경되었다. 서비스 테스트는 성공 및 실패 경로를 검증하고, 컨트롤러 Swagger 설명은 API 동작을 구체화한다.

Changes

연주 완료 처리

Layer / File(s) Summary
MIDI 저장 완료 이벤트 흐름
src/main/java/com/mr/domain/playing/service/PlayingService.java
MIDI 저장 완료 후 주간 연습 마일스톤을 계산한다. 조건을 충족하면 NotificationEvent를 발행하고, 이후 사용자 ID를 포함한 PlayingCompletedEvent를 발행한다.
완료 흐름 검증
src/test/java/com/mr/domain/playing/service/PlayingServiceTest.java, src/test/java/com/mr/domain/playing/entity/PlayingTest.java
성공 경로에서 트랜잭션 실행, 녹음 검증, 완료 상태와 시간 설정, PlayingCompletedEvent 발행을 검증한다. 테스트 헬퍼와 연주 fixture를 갱신한다.
실패 경로 검증
src/test/java/com/mr/domain/playing/service/PlayingServiceTest.java
접근 거부, 진행 상태 오류, playingId null, 연주 미존재 조건에서 MIDI 저장과 이벤트 발행이 수행되지 않는지 검증한다.
연주 API 설명 갱신
src/main/java/com/mr/domain/playing/controller/PlayingController.java
연주 API 그룹과 녹음 파일 업로드 및 MIDI 저장 API의 Swagger 설명을 갱신한다.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Client
  participant PlayingController
  participant PlayingService
  participant ApplicationEventPublisher
  Client->>PlayingController: MIDI 이벤트 저장 요청
  PlayingController->>PlayingService: saveMidiEvents 호출
  PlayingService->>PlayingService: 녹음·소유자·상태 검증
  PlayingService->>PlayingService: MIDI 저장 및 연주 완료 처리
  PlayingService->>ApplicationEventPublisher: NotificationEvent 발행
  PlayingService->>ApplicationEventPublisher: PlayingCompletedEvent 발행
Loading

Possibly related PRs

Poem

MIDI가 저장되고
마일스톤 시간이 계산된다
완료 이벤트가 발행된다
통계 흐름이 이어지고
테스트가 결과를 확인한다 ✨

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Out of Scope Changes check ⚠️ Warning PlayingController의 Swagger 메타데이터 변경은 이슈 #132의 이벤트 연동 범위와 직접 관련이 없습니다. PlayingController의 Swagger 변경을 별도 PR로 분리하거나, 현재 PR에 포함할 필요성을 설명하는 관련 요구사항을 추가하세요.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed 제목은 MIDI 이벤트 기반 통계 연동이라는 PR의 핵심 변경을 명확하게 설명합니다.
Linked Issues check ✅ Passed MIDI 저장 및 완료 처리 후 PlayingCompletedEvent를 발행하고 관련 테스트를 추가하여 이슈 #132의 목표를 충족합니다.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/#132-playing-completion-statistics

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.

@rkdehdrbs7885-oss rkdehdrbs7885-oss left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

기존에 있던 마일스톤 알림 로직이 메서드로 깔끔하게 분리되어서 saveMidiEvents의 가독성이 좋아진 것 같습니다! PlayingCompletedEvent도 적절한 위치에 잘 연결된 것 같습니다. 수고하셨습니다!

@kimyw1018 kimyw1018 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

수고하셨습니다. 리뷰 확인해주시고 머지하셔욥!

Comment thread src/test/java/com/mr/domain/playing/service/PlayingServiceTest.java Outdated
Comment thread src/main/java/com/mr/domain/playing/service/PlayingService.java
@on1yoneprivate
on1yoneprivate merged commit 3e4cec7 into develop Aug 4, 2026
2 checks passed
@kimyw1018
kimyw1018 deleted the feat/#132-playing-completion-statistics branch August 9, 2026 12:54
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.

✨ Feature - 연주 완료 이벤트 기반 통계 데이터 저장 구현

3 participants