지금 지우면 일어나는 일#
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. 본문은 남기고 표시는탈퇴한 회원. 식사 종료 후 30일 표시, 90일 삭제.- 멤버십은 탈퇴자만 제거. 다른 참가자 cascade 금지.
- 신고 메시지는 복사해 사건 종료 후 1년. 일반 채팅 90일과 분리.
suspended_by는on delete set null또는 시스템 계정.- 동의 이력 보존 기간을 정한 뒤에만 consent event cascade를 유지하거나 익명화한다.
- 삭제 job 상태(
queued/running)가 생기기 전에는 취소를withdrawal_requested에서만 허용한다.
아직 열지 않는 것#
- 마이페이지·관리자의 즉시 Auth 삭제 버튼
- 광고 메일 발송
- 전자상거래 보존기간을 계정 전체에 적용