Skip to content

[Feat] 회원탈퇴 및 연관 데이터 일괄 정리 구현 - #127

Merged
ww123ok merged 3 commits into
developfrom
feat/126-user-withdrawal
Nov 7, 2026
Merged

ww123ok merged 3 commits into
developfrom
feat/126-user-withdrawal

Conversation

@befur1

@befur1 befur1 commented Nov 6, 2026 •

Copy link
Copy Markdown
Collaborator

PULL REQUEST

🎋 작업 브랜치

💡 작업동기

  • 작업 배경을 알려주세요.

🔑 주요 변경사항

  • 회원탈퇴 API와 모든 기기의 로그인 세션 무효화를 구현했습니다.
  • 개인 콘텐츠를 벌크 삭제하고, 이미지 파일 정리·카카오 연결 해제를 재시도하도록 처리했습니다.
  • 유료·무료 크레딧 잔액을 구분하고, 환불 미접수·결제 미확정 시 탈퇴를 제한했습니다.
  • 거래기록 보존·기간 종료 후 파기와 재가입 시 최초 가입 보상 중복 지급 방지를 구현했습니다.
  • V7 마이그레이션, 관련 테스트 및 프론트 연동·운영 문서를 추가했습니다.

🏞 스크린샷 (선택)

스크린샷을 첨부해주세요.

💬 리뷰 요구사항 (선택)

리뷰어가 특별히 봐주었으면 하는 부분이 있다면 작성해주세요

ex) 메서드 XXX의 이름을 더 잘 짓고 싶은데 혹시 좋은 명칭이 있을까요?

- 회원탈퇴 API와 전체 세션 무효화 및 개인 콘텐츠 벌크 삭제 구현
- 유료/무료 잔액 분리 조회와 환불 접수 여부 기반 탈퇴 제한 추가
- 이미지 정리 및 카카오 연결 해제 재시도와 재가입 보상 중복 방지 구현
- 거래 기록 보존·기간 종료 파기 및 V7 마이그레이션과 연동 문서 추가

검증: 전체 테스트 1,005개와 추가 마이그레이션 테스트 1개 통과.
MySQL 8.0 격리 DB 보조 테스트 15개, JAR 빌드, MySQL 테스트 컴파일 통과.
MySQL 8.4 및 실제 카카오 호출 검증은 미실행.
@befur1
befur1 requested a review from ww123ok November 6, 2026 06:09
@befur1 befur1 self-assigned this Nov 6, 2026
@befur1 befur1 added the FEAT label Nov 6, 2026
@befur1 befur1 linked an issue Nov 6, 2026 that may be closed by this pull request
33 tasks
@coderabbitai

coderabbitai Bot commented Nov 6, 2026 •

Copy link
Copy Markdown

Important

  • Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

Run configuration

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Tip

🎯 Customize your risk assessments

Guide how CodeRabbit assesses merge risk and security architecture risk. Highlight sensitive changes and explain your security boundaries using Merge Risk Instructions and Security Risk Instructions in your review settings. Security architecture risk assessments require the Advanced plan or above.

✅ Automatic approvals, with your rules

Let CodeRabbit approve pull requests once required threads are resolved, pre-merge checks pass, and your risk limits are met. Enable Automatic approvals in review settings, with overrides for teams or file paths.

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

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 6, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-11-06T06:12:14.036767Z 5418963 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 5418963d69

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

long unfinished=em.createQuery("select count(r) from ImageCleanupRequest r where r.userId=:user and r.status<>:done",Long.class)
.setParameter("user",userId).setParameter("done",ImageCleanupRequest.Status.COMPLETED).getSingleResult();
if(unfinished>0) return false;
data.deleteAccounting(userId,now());

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Revalidate accounting retention before deleting financial records

If an operator reclaims a payment after withdrawal, this purge can delete the new accounting records before their five-year retention period ends. PaymentReclaimer.execute() updates payment_orders.updated_at and inserts a dated payment_credit_reclamations row, but does not extend users.retention_until; only the Spring payment callbacks call retainAccountingRecords(). This is reachable when a READY order is paid and cancelled after withdrawal and subsequently reclaimed. Recompute the latest accounting retention deadline under the user lock before deleting, or extend the stored deadline in the reclamation transaction as well.

Useful? React with 👍 / 👎.

@ww123ok
ww123ok merged commit 1b7a0da into develop Nov 7, 2026
2 checks passed
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.

[FEAT] 회원탈퇴 및 연관 데이터 일괄 정리

2 participants