모든 조회와 변경은 token의 userId와 project ownerId를 함께 본다.
파일 관리 API는 소유권, 경로, 삭제 정합성을 함께 지킨다
프로젝트, 폴더, 파일은 다른 리소스지만 한 작업 흐름에서 움직인다. API는 저장 구조보다 소유자와 트랜잭션 경계를 먼저 보여야 한다.
Folder와 File은 Project 안에서 부모 경로와 이름 충돌을 관리한다.
재귀 삭제나 이동은 하위 파일과 폴더가 함께 성공하거나 롤백되어야 한다.
| 작업 | 먼저 확인 | 서비스 책임 | 실패 응답 |
|---|---|---|---|
| 프로젝트 조회GET /projects/:id | projectId + userId | 소유자 기준으로 파일 트리 반환 | 404 또는 403로 노출 차단 |
| 파일 생성POST /files | 부모 폴더와 이름 충돌 | DTO 필드 제한, 경로 계산 | 400/409로 원인 분리 |
| 폴더 삭제DELETE /folders/:id | 하위 파일과 폴더 범위 | 재귀 삭제 트랜잭션 | 부분 삭제 없이 rollback |
API 기준: 파일 작업은 항상 소유자 검증을 먼저 통과하고, 트리 변경은 트랜잭션으로 묶어 고아 레코드를 막는다.