folders 스키마 (드라이브 폴더 트리)
현장 드라이브에 업로드되는 파일을 분류하기 위한 폴더 트리 문서. 부모/자식 관계는
parent_folder_id필드로만 표현되며, 실제 파일 메타는companies/{cid}/sites/{sid}/files/컬렉션에 저장됩니다.
저장 위치
folder_id는 Firestore 자동 ID.- 트리 구조는
parent_folder_id로 연결되며, 최상위 카테고리에 직접 속하는 폴더는parent_folder_id = null로 저장됩니다. - 파일 연결:
files/{file_id}문서의related_doc_id == folder_id로 매칭합니다.
드라이브 최상위 카테고리
폴더는 반드시 아래 5개 카테고리 중 하나에 속합니다.
| 카테고리 | 의미 |
|---|---|
affairs |
서무 |
construction |
시공 |
management |
관리 |
safety |
안전 |
etc |
기타 |
- 폴더 생성 시
category가 필수이며, 상위 폴더가 지정되면 상위 폴더의category와 반드시 일치해야 합니다 (_create_drive_folder에서 검증).
생성/수정/삭제 엔드포인트
| 엔드포인트 | 동작 | 갱신 필드 |
|---|---|---|
create_drive_folder |
새 폴더 생성 | 모든 필드 초기값 |
rename_drive_folder |
이름 변경 | name, updated_at |
delete_drive_folder |
폴더 및 하위 재귀 삭제 | 하위 폴더 순차 삭제 + 포함 파일은 휴지통 이동 |
문서 필드
| 필드 | 타입 | 설명 |
|---|---|---|
name |
string | 폴더 이름 (1~50자) |
category |
string | 최상위 카테고리 (affairs | construction | management | safety | etc) |
parent_folder_id |
string | null | 상위 폴더 ID. 최상위 카테고리 바로 아래면 null |
created_by |
string | 생성자 UID |
created_at |
timestamp | 생성 시각 (UTC) |
updated_at |
timestamp | 수정 시각 (UTC). 생성 시 created_at과 동일 |
삭제 동작 상세 (_delete_drive_folder)
- BFS로 하위 폴더 ID 재귀 수집 —
_collect_descendant_folder_ids가parent_folder_id체인을 따라 모든 자손 폴더 ID를 리스트로 반환. - 폴더별 파일을 휴지통으로 이동 — 각 폴더 ID를
related_doc_id로 가진files문서를 조회하여_move_to_trash_functions로 이동. - 역순(자식 → 부모) 폴더 문서 delete.
- 응답에 성공/실패 건수를 포함 (
deleted_folders_count,failed_folders_count,trashed_files_count,failed_files_count).
파일 업로드 연결 (_get_drive_file_upload_token)
드라이브 업로드 토큰 발급 시 Cloudflare 업로드 메타에 다음 값이 지정됩니다.
folder_path = companies/{cid}/sites/{sid}/drive
related_doc_id = folder_id
doc_type = "site"
doc_page = "drive"
tags = {"category": <folder.category>}
업로드 완료 후 files/{file_id}.related_doc_id로 폴더와 연결됩니다.
예시 문서
최상위 바로 아래 (parent_folder_id = null)
{
"name": "안전교육 자료",
"category": "safety",
"parent_folder_id": null,
"created_by": "uid_admin",
"created_at": "2026-04-10T07:00:00Z",
"updated_at": "2026-04-10T07:00:00Z"
}