Skip to content

Refactor/#231 ClickAnomalyEvent, ClickBaselineStat 연관 삭제 보장 - #232

Merged
ojy0903 merged 9 commits into
developfrom
refactor/#231
Aug 29, 2026
Merged

ojy0903 merged 9 commits into
developfrom
refactor/#231

Conversation

@ojy0903

@ojy0903 ojy0903 commented Aug 27, 2026

Copy link
Copy Markdown
Collaborator

📌 관련 이슈

🚀 개요

이번 PR에서 변경된 핵심 내용을 요약해주세요.

광고 플랫폼 연동 해제, 조직 삭제 시 연관된 ClickAnomalyEvent, ClickBaselineStat 이 함께 제거될 수 있도록 코드를 개선했습니다.

📄 작업 내용

구체적인 작업 내용을 설명해주세요.

  • 조직 삭제 시 연관된 ClickAnomalyEvent, ClickBaselineStat 제거 처리 추가
  • 광고 플랫폼 연동 해제 시 ClickAnomalyEvent, ClickBaselineStat 제거 처리 추가
  • 회원, 조직 엔티티에 대한 삭제 연관성 테스트 코드 추가

📸 스크린샷 / 테스트 결과 (선택)

결과물 확인을 위한 사진이나 테스트 로그를 첨부해주세요.

테스트 코드 통과 확인
image

✅ 체크리스트

  • 브랜치 전략(GitHub Flow)을 준수했나요?
  • 메서드 단위로 코드가 잘 쪼개져 있나요?
  • 테스트 통과 확인
  • 서버 실행 확인
  • API 동작 확인

🔍 리뷰 포인트 (Review Points)

리뷰어가 중점적으로 확인했으면 하는 부분을 적어주세요. (P1~P4 적용 가이드)

  • 엔티티 삭제 관련해서 ClickAnomalyEvent, ClickBaselineStat 엔티티가 조직이 삭제되거나 회원 탈퇴 전 광고 플랫폼 연동 해제 시 함께 삭제되지 않는 것이 확인되어서 수정을 진행했습니다.
  • 추후에 엔티티가 확장될 경우 User 엔티티나 Organization 엔티티의 id 값을 참조하게 되어 연관 엔티티 삭제 처리를 누락하지 않게 하기 위해 테스트 코드를 추가해봤는데 어떨까요? 새로운 엔티티가 User 나 Organization 엔티티 의 PK 를 참조하면 해당 테스트에서 오류가 발생해서 OnDelete 어노테이션이나 서비스 코드 내부 삭제 로직을 추가하도록 알려주는 용도로 제작했습니다.
    만약 PK를 참조하는 엔티티가 추가된다면 해당 테스트로 확인한 뒤, OnDelete 나 서비스 로직에서 명시적으로 연관 삭제를 진행하게 하고, 테스트 코드에서 상수 부분을 추가해서 테스트가 통과되도록 수정하면 됩니다.
    테스트용 application-test.yml 에서 로컬 DB 의 information_schema 만 SELECT 로 참조하도록 한거라 운영 DB 에 문제 없을 것 같은데 혹시라도 CI 가 실패하거나 문제점 발견되면 수정해보겠습니다..!!

💬 리뷰어 가이드 (P-Rules)
P1: 필수 반영 (Critical) - 버그 가능성, 컨벤션 위반. 해결 전 머지 불가.
P2: 적극 권장 (Recommended) - 더 나은 대안 제시. 가급적 반영 권장.
P3: 제안 (Suggestion) - 아이디어 공유. 반영 여부는 드라이버 자율.
P4: 단순 확인/칭찬 (Nit) - 사소한 오타, 칭찬 등 피드백.

Summary by CodeRabbit

  • 개선 사항

    • 광고 계정 연동 해제 시 클릭 이상 이벤트와 클릭 기준 통계가 대량 데이터에서도 안전하게 단계적으로 정리됩니다.
    • 조직을 완전히 삭제할 때 관련 클릭 이상 이벤트도 함께 삭제됩니다.
  • 테스트

    • 조직 및 사용자 삭제와 데이터베이스 참조 관계의 안전성을 검증하는 테스트를 추가했습니다.
    • 테스트 전용 데이터베이스 및 JPA 환경 설정을 추가했습니다.

@ojy0903 ojy0903 self-assigned this Aug 27, 2026
@ojy0903 ojy0903 added 🐛 Bug 버그 수정 ✅ Test 테스트 코드 작성 및 수정 ♻️ Refactor 코드 구조 개선 labels Aug 27, 2026
@coderabbitai

coderabbitai Bot commented Aug 27, 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: e4f2af61-b304-4880-bb1d-dd352a7427aa

📥 Commits

Reviewing files that changed from the base of the PR and between 5e01252 and 9327c0c.

📒 Files selected for processing (7)
  • src/main/java/com/whereyouad/WhereYouAd/domains/click/persistence/repository/ClickAnomalyEventRepository.java
  • src/main/java/com/whereyouad/WhereYouAd/domains/click/persistence/repository/ClickBaselineStatRepository.java
  • src/main/java/com/whereyouad/WhereYouAd/domains/organization/domain/service/OrgServiceImpl.java
  • src/main/java/com/whereyouad/WhereYouAd/domains/platform/domain/service/PlatformServiceImpl.java
  • src/main/java/com/whereyouad/WhereYouAd/domains/platform/domain/service/scheduler/PlatformDataCleanupExecutor.java
  • src/test/java/com/whereyouad/WhereYouAd/global/common/DeletionSafetyGuardTest.java
  • src/test/resources/application-test.yml

Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review.


Walkthrough

조직 Hard Delete와 플랫폼 계정 정리 과정에 클릭 이상 이벤트 및 클릭 기준 통계 삭제를 추가했습니다. 저장소에 청크 삭제 쿼리를 정의하고, 삭제 참조 구조를 검증하는 JPA 테스트와 MySQL 테스트 설정을 추가했습니다.

Changes

클릭 데이터 삭제 정리

Layer / File(s) Summary
클릭 데이터 삭제 저장소 계약
src/main/java/com/whereyouad/WhereYouAd/domains/click/persistence/repository/*Repository.java
플랫폼 계정의 ClickAnomalyEventClickBaselineStat을 조인 경로로 조회해 배치 삭제하는 메서드를 추가했습니다. 조직별 ClickAnomalyEvent 삭제 메서드도 추가했습니다.
조직 Hard Delete 연동
src/main/java/com/whereyouad/WhereYouAd/domains/organization/domain/service/OrgServiceImpl.java
일반 조직 Hard Delete와 탈퇴 회원 소유 조직 Hard Delete에서 deleteByOrgId를 호출하도록 변경했습니다.
플랫폼 계정 청크 정리
src/main/java/com/whereyouad/WhereYouAd/domains/platform/domain/service/PlatformServiceImpl.java, src/main/java/com/whereyouad/WhereYouAd/domains/platform/domain/service/scheduler/PlatformDataCleanupExecutor.java
플랫폼 계정 정리 중 ClickAnomalyEventClickBaselineStatBATCH_SIZE 단위로 삭제합니다. 각 청크 삭제는 REQUIRES_NEW 트랜잭션으로 실행하며 누적 삭제 건수를 기록합니다.
삭제 참조 안전성 검증
src/test/java/com/whereyouad/WhereYouAd/global/common/DeletionSafetyGuardTest.java, src/test/resources/application-test.yml
조직과 사용자에 대한 Foreign Key 및 일반 참조 컬럼을 information_schema에서 조회하고 기준 집합과 비교합니다. MySQL 테스트 데이터소스와 create-drop JPA 설정을 추가했습니다.

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

Merge Risk: ⚪ Minimal · up to 9327c

The PR adds cleanup for click anomaly and baseline data when organizations or advertising-platform connections are removed; no actionable merge-blocking risk remains after normal checks and review.

Suggested reviewers: kingmingyu

Sequence Diagram(s)

sequenceDiagram
  participant PlatformServiceImpl
  participant PlatformDataCleanupExecutor
  participant ClickAnomalyEventRepository
  participant ClickBaselineStatRepository
  PlatformServiceImpl->>PlatformDataCleanupExecutor: 계정별 이상 이벤트 청크 삭제
  PlatformDataCleanupExecutor->>ClickAnomalyEventRepository: deleteByPlatformAccountIdInBatch
  ClickAnomalyEventRepository-->>PlatformDataCleanupExecutor: 삭제 건수 반환
  PlatformServiceImpl->>PlatformDataCleanupExecutor: 계정별 기준 통계 청크 삭제
  PlatformDataCleanupExecutor->>ClickBaselineStatRepository: deleteByPlatformAccountIdInBatch
  ClickBaselineStatRepository-->>PlatformDataCleanupExecutor: 삭제 건수 반환
Loading
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 72.22% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 18 functions across 6 files. (1 skipped: … Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed 조직 삭제와 광고 플랫폼 연동 해제 시 ClickAnomalyEvent 및 ClickBaselineStat을 삭제하도록 구현했습니다. 회원 탈퇴와 조직 참조 구조를 점검하는 DeletionSafetyGuardTest도 추가하여 이슈 #231의 삭제 로직 점검 범위를 충족합니다.
Out of Scope Changes check ✅ Passed Repository 삭제 메서드, 삭제 서비스 로직, 삭제 안전성 테스트, 테스트 환경 설정은 모두 이슈 #231의 엔티티 삭제 안정성 개선과 직접 관련됩니다. 확인 가능한 범위에서 무관한 변경은 없습니다.
Title check ✅ Passed PR 제목이 ClickAnomalyEvent와 ClickBaselineStat의 연관 삭제 보장이라는 주요 변경 사항을 명확하고 간결하게 설명합니다.
Description check ✅ Passed 관련 이슈, 개요, 작업 내용, 테스트 결과, 체크리스트, 리뷰 포인트를 모두 포함합니다. 변경 목적과 삭제 처리 범위도 구체적으로 설명되어 있습니다.
Full details: Docstring Coverage

Explanation

Docstring coverage is 72.22% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 18 functions across 6 files. (1 skipped: 1 unsupported.)

  • Fix all pre-merge checks with AI
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch refactor/#231

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.

@kingmingyu kingmingyu left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

P4: 고생하셨어요! 광고 계정 연동 해제 및 조직 Hard Delete 시 ClickAnomalyEvent, ClickBaselineStat이 함께 정리되도록 잘 반영된 것 같습니다..! 테스트 코드도 저는 있는게 좋다고 생각합니다! application-test.yml은 ci쪽 db 생성이랑 중복되는 것 같긴한데 로컬에서 테스트 돌리기 위해서는 필요해서 추가하는 것이 좋은 것 같아요!

@ojy0903
ojy0903 merged commit a1106b6 into develop Aug 29, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🐛 Bug 버그 수정 ♻️ Refactor 코드 구조 개선 ✅ Test 테스트 코드 작성 및 수정

Projects

None yet

Development

Successfully merging this pull request may close these issues.

refactor: 엔티티 삭제 관련 점검 및 개선

2 participants