콘텐츠로 이동

folders 스키마 (드라이브 폴더 트리)

현장 드라이브에 업로드되는 파일을 분류하기 위한 폴더 트리 문서. 부모/자식 관계는 parent_folder_id 필드로만 표현되며, 실제 파일 메타는 companies/{cid}/sites/{sid}/files/ 컬렉션에 저장됩니다.

저장 위치

companies/{company_id}/sites/{site_id}/folders/{folder_id}
  • 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)

  1. BFS로 하위 폴더 ID 재귀 수집_collect_descendant_folder_idsparent_folder_id 체인을 따라 모든 자손 폴더 ID를 리스트로 반환.
  2. 폴더별 파일을 휴지통으로 이동 — 각 폴더 ID를 related_doc_id로 가진 files 문서를 조회하여 _move_to_trash_functions로 이동.
  3. 역순(자식 → 부모) 폴더 문서 delete.
  4. 응답에 성공/실패 건수를 포함 (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"
}

하위 폴더

{
  "name": "2026년 1분기",
  "category": "safety",
  "parent_folder_id": "folder_parent_doc_id",
  "created_by": "uid_admin",
  "created_at": "2026-04-10T07:05:00Z",
  "updated_at": "2026-04-12T02:30:00Z"
}