지금 지우면 일어나는 일#
profiles.id는 auth.users에 on delete cascade다. 그 아래도 cascade다.
| 대상 | 현재 FK | Auth/프로필 삭제 시 |
|---|---|---|
public.profiles |
users cascade | 행 삭제 |
public.chat_rooms.created_by |
profiles cascade | 방 전체 삭제 |
public.chat_room_members |
room·user cascade | 멤버십 삭제. 방 삭제면 전원 삭제 |
public.messages.sender_id |
profiles cascade | 그 방 메시지 삭제. 방 cascade면 타인 메시지도 삭제 |
private.account_lifecycle |
users cascade | 행 삭제 |
private.user_consents |
users cascade | 현재 동의 삭제 |
private.user_consent_events |
users cascade | 이력 삭제 |
private.admin_grants |
users cascade | 관리자 권한 삭제 |
private.account_suspensions.user_id |
users cascade | 정지 기록 삭제 |
private.account_suspensions.suspended_by |
users, ON DELETE 없음 | 정지시킨 관리자 삭제 시 실패 가능 |
백업·로그·Resend·Supabase 외부 사본은 스키마 밖이라 이 표에 없다. runbook에서 따로 적는다.
열기 전에 바꿀 것#
이미 정한 기간(탈퇴 보존기간)과 맞춘다.
chat_rooms.created_by를 nullable 또는 tombstone 프로필로. 호스트 탈퇴 시 예정 식사는 취소·공지하고 방을 지우지 않는다.messages.sender_id를 nullable. 본문은 남기고 표시는탈퇴한 회원. 표시·삭제 일수는 탈퇴 보존기간.- 멤버십은 탈퇴자만 제거. 다른 참가자 cascade 금지.
- 신고 메시지는 복사해 사건 저장소로 분리. 기간은 같은 ADR.
suspended_by는on delete set null또는 시스템 계정.- 동의 이력은 같은 ADR의 2년 뒤 비식별화. 그 전에는 cascade로 지우지 않는다.
- 삭제 job 상태(
queued/running)가 생기기 전에는 취소를withdrawal_requested에서만 허용한다.
아직 열지 않는 것#
- 마이페이지·관리자의 즉시 Auth 삭제 버튼
- 삭제 FK·tombstone·삭제 job. 순서는 탈퇴 구현 순서
- 광고 메일 발송
- 전자상거래 보존기간을 계정 전체에 적용