Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 0 additions & 52 deletions .github/workflows/discord-pr-notify.yml

This file was deleted.

71 changes: 45 additions & 26 deletions docs/REQUIREMENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -303,16 +303,22 @@ Block {
3. 문서는 반드시 존재하는 워크스페이스에 속해야 한다.
4. v1의 Workspace는 생성과 조회만 제공하며 삭제/멤버 관리 책임은 갖지 않는다.

## 7.1 문서 규칙
## 7.1 문서 규칙
1. `parentId IS NULL`이면 루트 문서다.
2. 하위 문서는 반드시 같은 `workspaceId` 내 부모 문서를 가져야 한다.
3. soft delete된 문서는 기본 조회에서 제외한다.
4. 문서를 삭제하면 해당 문서의 블록도 함께 soft delete 처리해야 한다.
5. 물리 삭제가 필요한 운영/테스트 정리 상황에서는 부모 문서 hard delete 시 하위 문서 FK가 함께 정리되어 계층 dangling reference가 남지 않아야 한다.
6. 하위 문서 cascade delete 여부는 제품 정책으로 확정해야 하나, v1에서는 **하위 문서까지 soft delete**를 권장한다.
7. 자기 자신을 부모 문서로 둘 수 없다.
8. 순환 참조(cycle)는 허용하지 않는다.
9. 같은 형제 집합(sibling scope) 내 활성 문서의 `sortKey`는 유일해야 한다.
3. 휴지통 문서는 기본 조회에서 제외한다.
4. 기본 문서 삭제 API는 hard delete를 의미해야 한다.
5. 기본 문서 삭제 시 대상 문서의 하위 문서와 각 문서 소속 블록도 함께 물리 삭제해야 한다.
6. 휴지통 이동은 기본 삭제와 분리된 `PATCH /v1/documents/{documentId}/trash` 엔드포인트로 제공해야 한다.
7. 문서를 휴지통에 넣으면 `deletedAt`을 기록해야 한다.
8. 휴지통에 들어간 문서는 현재 테스트 기준 `deletedAt`으로부터 5분이 지나면 자동 영구 삭제 대상이 된다.
9. 자동 영구 삭제 대상에는 해당 문서의 하위 문서와 각 문서 소속 블록이 함께 포함되어야 한다.
10. 현재 테스트 기준 5분이 지나지 않은 휴지통 문서는 복구 가능해야 하며, 부모 문서가 삭제 상태인 경우 자식 문서 단독 복구는 허용하지 않는다.
11. 휴지통 문서는 휴지통 조회/복구 API를 제외한 일반 문서 목록, 단건 조회, 콘텐츠 조회의 기본 결과에서 제외해야 한다.
12. 물리 삭제가 필요한 운영/테스트 정리 상황에서는 부모 문서 hard delete 시 하위 문서 FK가 함께 정리되어 계층 dangling reference가 남지 않아야 한다.
13. 자기 자신을 부모 문서로 둘 수 없다.
14. 순환 참조(cycle)는 허용하지 않는다.
15. 같은 형제 집합(sibling scope) 내 활성 문서의 `sortKey`는 유일해야 한다.

## 7.2 블록 규칙
1. `parentId IS NULL`이면 문서 루트 블록이다.
Expand Down Expand Up @@ -359,10 +365,10 @@ Block {
- 문서 콘텐츠 조회 시 블록 순서가 보장되어야 한다.

## 8.2 문서 생성
### 요구사항
- 사용자는 워크스페이스 내에 새 문서를 생성할 수 있어야 한다.
- 루트 문서 또는 특정 부모 문서 하위로 생성 가능해야 한다.
- 문서 제목, 아이콘, 커버를 지정할 수 있어야 한다.
### 요구사항
- 사용자는 워크스페이스 내에 새 문서를 생성할 수 있어야 한다.
- 루트 문서 또는 특정 부모 문서 하위로 생성 가능해야 한다.
- 문서 제목, 아이콘, 커버를 지정할 수 있어야 한다.

### 결과 조건
- 생성된 문서는 지정된 부모 및 워크스페이스와 정합성을 가져야 한다.
Expand Down Expand Up @@ -423,15 +429,21 @@ Block {
- 동일 위치로 이동하는 no-op 요청은 성공으로 처리할 수 있어야 한다.
- no-op 요청은 실제 DB 갱신 없이 성공 응답만 반환할 수 있다.

## 8.5 문서 삭제 복구
## 8.5 문서 삭제 / 휴지통 / 복구
### 요구사항
- 문서 삭제는 soft delete로 처리해야 한다.
- 문서 삭제 시 해당 문서의 모든 블록도 soft delete 처리해야 한다.
- 삭제된 문서는 복구할 수 있어야 한다.
- 문서 기본 삭제 API는 대상 문서, 하위 문서, 각 문서 소속 블록을 즉시 물리 삭제해야 한다.
- 문서 휴지통 이동은 기본 삭제와 분리된 `PATCH /v1/documents/{documentId}/trash` 엔드포인트로 제공해야 한다.
- 문서를 휴지통에 넣을 때 `deletedAt`을 기록해야 한다.
- 문서 휴지통 이동 시 대상 문서의 하위 문서와 각 문서 소속 블록도 함께 휴지통 상태로 전환해야 한다.
- 휴지통 문서는 현재 테스트 기준 `deletedAt + 5분`이 지나면 자동 영구 삭제 대상이 되어야 한다.
- 자동 영구 삭제 시 대상 문서, 하위 문서, 각 문서 소속 블록을 함께 정리해야 한다.
- 휴지통에 들어간 문서는 현재 테스트 기준 5분 이내에는 복구할 수 있어야 한다.
- 복구 시 부모 문서 상태를 함께 검증해야 한다.

### 권장 정책
- 부모 문서가 삭제 상태인 경우, 자식 문서 단독 복구는 실패 처리한다.

### 권장 정책
- 부모 문서가 삭제 상태인 경우, 자식 문서 단독 복구는 실패 처리한다.
- 현재 테스트 기준 5분이 지난 휴지통 문서는 복구 실패 처리한다.
- 자동 삭제 시간은 현재 테스트를 위해 5분으로 두며, 추후 제품 정책에 따라 조정할 수 있어야 한다.

## 8.6 블록 조회
### 요구사항
Expand Down Expand Up @@ -867,16 +879,23 @@ TEXT 블록 생성.

## 14. 데이터 저장 및 삭제 정책

## 14.1 삭제 정책
- API의 `DELETE`는 물리 삭제가 아니라 soft delete다.
- soft delete는 `deletedAt` 설정으로 표현한다.
- 물리 삭제는 별도 배치 또는 운영 툴로만 수행한다.

## 14.1 삭제 정책
- 문서 기본 `DELETE`는 hard delete다.
- 문서 기본 `DELETE`는 대상 문서, 하위 문서, 각 문서 소속 블록을 함께 물리 삭제해야 한다.
- 휴지통 이동은 문서 기본 `DELETE`와 분리된 `PATCH /v1/documents/{documentId}/trash` API로 제공한다.
- 휴지통 상태는 `deletedAt` 설정으로 표현한다.
- 휴지통에 들어간 문서는 현재 테스트 기준 `deletedAt`으로부터 5분이 지나면 자동 영구 삭제 대상이 된다.
- 자동 영구 삭제는 별도 배치 또는 스케줄러로 수행할 수 있다.
- 자동 영구 삭제 시 대상 문서, 하위 문서, 각 문서 소속 블록을 함께 물리 삭제해야 한다.
- 자동 영구 삭제 시간은 현재 테스트를 위해 5분으로 두며, 추후 정책에 따라 변경할 수 있다.

## 14.2 복구 정책
- v1 복구 대상은 문서 soft delete로 한정한다.
- soft delete된 문서는 일정 기간 내 복구 가능해야 한다.
- v1 복구 대상은 휴지통으로 이동한 문서로 한정한다.
- 휴지통 문서는 보관 시간 안에서만 복구 가능해야 한다.
- 현재 테스트 기준 복구 가능 시간은 `deletedAt` 기준 5분 이내다.
- 문서 복구 시 부모 문서 상태를 검증해야 한다.
- 부모 문서가 삭제 상태면 자식 문서 단독 복구를 제한한다.
- 자동 영구 삭제가 완료된 문서는 복구 대상이 아니다.
- 블록 단위 직전 편집 취소는 브라우저 세션 범위의 undo/redo로 처리한다.

## 14.3 정렬 정책
Expand Down
Loading