3a22d225a0
delete_file 파라미터가 광고만 하고 본문에서 0회 참조(soft-delete만, 파일 영구 잔존 + 프론트가 실제 호출)되던 거짓 계약 구현. (c) 큐드삭제: - 마이그 359: documents.purge_requested_at 컬럼(ADD COLUMN IF NOT EXISTS, replayable). - delete_document: delete_file=true 시 purge_requested_at 마커 set(deleted_at 과 별도). - document_purge_sweep cron(03:20 KST): purge_requested_at + grace(30일) 경과 + 파일 존재 시 NAS 원본 unlink + AUDIT 로그. ★sweep 는 deleted_at 아니라 purge_requested_at 기준 — 일반 숨김(delete_file=false)은 파일 보존(undelete 가능), 명시 purge 만 물리삭제(데이터 안전). - DELETE 요청 경로엔 동기 비가역 op 0. 파일 존재 체크로 멱등. unlink 는 to_thread(R5 일관). 검증: py_compile 통과. migration txn 제어문 없음. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
7 lines
545 B
SQL
7 lines
545 B
SQL
-- 359: delete_file=true 명시 삭제 요청 마커 (R7 delete_file 큐드삭제).
|
|
-- retention sweep(document_purge_sweep) 이 이 컬럼 + grace(30일) 기준으로 NAS 원본을
|
|
-- 물리삭제한다. deleted_at(단순 숨김)과 분리 — 숨김(delete_file=false)은 파일 보존(undelete
|
|
-- 가능). sweep 가 deleted_at 기준이면 모든 숨김이 30일 후 물리삭제되는 데이터 손실이 되므로
|
|
-- 명시 purge 요청만 대상으로 한다.
|
|
ALTER TABLE documents ADD COLUMN IF NOT EXISTS purge_requested_at TIMESTAMPTZ;
|