Skip to content

[FEATURE] 문서 휴지통 자동 삭제 기능 추가 #41

@hellonaeunkim

Description

@hellonaeunkim

📝 작업 개요

기존 문서 삭제 정책을 hard delete + 별도 휴지통 기능으로 분리하고, 휴지통 이동/복구/조회/자동 영구 삭제까지 포함한 문서 휴지통 기능을 구현한다.

🎯 배경 / 문제 정의

  • 기존 문서 삭제는 soft delete / restore 중심으로 동작했지만, 기본 삭제와 휴지통 기능의 역할이 분리되어 있지 않아 API 의미가 모호했다.
  • 사용자가 문서를 완전히 삭제하는 경우와, 잠시 보관 후 복구 가능한 휴지통으로 보내는 경우를 명확히 구분할 필요가 있다.
  • 휴지통에 들어간 문서는 일정 시간 안에는 복구 가능해야 하고, 시간이 지나면 자동으로 정리되어야 한다.
  • 문서는 하위 문서와 블록 트리를 함께 가지므로, 휴지통 이동 / 복구 / 자동 영구 삭제 범위가 일관되게 정의되지 않으면 데이터 정합성이 깨질 수 있다.
  • 휴지통 목록에서는 제목만으로 문서를 구분하려고 하므로, 같은 워크스페이스 안에서 문서 제목 중복 정책도 함께 정리할 필요가 있다.

📌 요구 사항 (Acceptance Criteria)

  • 기존 DELETE /v1/documents/{documentId} 는 문서, 하위 문서, 각 문서 소속 블록을 즉시 물리 삭제하도록 동작한다.
  • 문서를 휴지통으로 이동하는 PATCH /v1/documents/{documentId}/trash API를 제공한다.
  • 휴지통 이동 시 대상 문서에 deletedAt 이 기록된다.
  • 휴지통 이동 시 하위 문서와 각 문서 소속 블록도 함께 soft delete 된다.
  • 기존 POST /v1/documents/{documentId}/restore 는 휴지통 복구 API로 동작한다.
  • 휴지통 문서만 복구 가능하다.
  • 현재 테스트 기준 deletedAt + 5분 이전 문서만 복구 가능하다.
  • 부모 문서가 삭제 상태이면 자식 문서 단독 복구는 실패한다.
  • 휴지통 문서는 현재 테스트 기준 deletedAt + 5분 이 지나면 자동 영구 삭제된다.
  • 자동 영구 삭제 시 대상 문서, 하위 문서, 각 문서 소속 블록이 함께 물리 삭제된다.
  • 특정 워크스페이스 기준 휴지통 문서 목록 조회 API를 제공한다.
  • 휴지통 목록 응답에는 최소한 documentId, title, parentId, deletedAt, purgeAt 이 포함된다.
  • 휴지통 목록은 제목만 보고 어떤 문서인지 구분할 수 있도록, 같은 워크스페이스 안에서는 활성 문서와 휴지통 문서를 포함해 문서 제목 중복을 허용하지 않는다.
  • 문서 제목 중복 금지는 create, update, restore 에 모두 적용된다.
  • 휴지통 문서는 일반 문서 목록/단건 조회/내용 조회의 기본 결과에서 제외된다.
  • 관련 요구사항 문서, discussion, roadmap, prompt 로그를 함께 갱신한다.

📚 상세 설명 (선택)

  • 기본 삭제와 휴지통을 분리한다.
    • DELETE /v1/documents/{documentId}: hard delete
    • PATCH /v1/documents/{documentId}/trash: 휴지통 이동
    • POST /v1/documents/{documentId}/restore: 휴지통 복구
  • 자동 영구 삭제 시간은 현재 테스트 기준 5분이며, 추후 정책에 따라 변경 가능하다는 점을 문서에 남긴다.
  • 휴지통 조회 API는 워크스페이스 단위 컬렉션 조회로 제공한다.

🚧 범위 - 포함(In Scope)

  • 문서 기본 삭제를 hard delete 로 전환
  • 문서 휴지통 이동 API 추가
  • 문서 휴지통 복구 API 보강
  • 휴지통 자동 영구 삭제 스케줄러 추가
  • 휴지통 문서 목록 조회 API 추가
  • 서비스 / 컨트롤러 / 통합 테스트 보강
  • docs/REQUIREMENTS.md, discussion, roadmap, prompt 로그 갱신

✅ 테스트 / 검증 항목

  • 단위 테스트 작성/수정
  • 로컬 환경에서 기능 동작 확인
  • 관련 문서(노션, README 등) 업데이트
  • 로그/모니터링 포인트 필요 시 추가

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Projects

Status

Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions