콘텐츠로 이동

system 영역 DB 스키마

여러 서비스가 공유하는 공통 Firestore 컬렉션 스키마 모음. 파일 메타, 인앱 알림, 검색 인덱스 등.

컬렉션 맵

companies/{company_id}/sites/{site_id}/files/{file_doc_id}   # 현장 단위 파일 메타
companies/{company_id}/files/{file_doc_id}                   # 회사 단위 파일 메타 (site_id 없을 때)
companies/{company_id}/deleted_files/{file_doc_id}           # 소프트 삭제된 파일 (휴지통)
companies/{company_id}/search_index/{index_id}               # 검색 인덱스 (트리거 자동 갱신)
users/{uid}/notifications/{notification_id}                  # 인앱 알림

문서 목록

컬렉션 스키마 문서 설명
.../files/{id} files.md Cloudflare R2 업로드 파일 메타 (업/다운로드/휴지통 공통)
companies/{cid}/search_index/{id} search_index.md 회사/현장 단위 멤버·장비 검색 인덱스 (트리거 자동 갱신)
users/{uid}/notifications/{id} notifications.md 인앱 알림 (FCM 푸시와 동시 기록)

FCM 토큰 저장 위치 (별도 컬렉션 아님)

FCM 푸시 토큰은 전용 컬렉션이 아니라 사용자 문서의 필드로 저장됩니다:

users/{uid}.fcm_token                              # 개인 디바이스 토큰
companies/{cid}/members/{uid}.fcm_token            # 회사 멤버 승인 시 스냅샷 (푸시 타깃 최적화용)
  • 토큰 갱신: update_fcm_token 엔드포인트 (tools/fcm.py_update_fcm_token). users/{uid}.fcm_token만 덮어씁니다.
  • 회사/현장 멤버 문서의 fcm_token은 가입 승인 시점의 스냅샷이며, 실시간으로 동기화되지 않을 수 있습니다. 실제 푸시 발송은 users/{uid}.fcm_token을 조회해서 진행합니다.
  • 탈퇴(withdraw) 시 users/{uid}.fcm_tokenNone으로 마스킹.

파일 업로드/삭제 흐름

get_*_upload_token → 사전서명 URL 발급 (아직 Firestore 문서 없음)
        ↓ 클라이언트가 R2 업로드
upload_report      → files 문서 생성 (메타 + tags)
move_to_trash      → deleted_files로 이동 (소프트 삭제, drive_usage.trash_bytes 증가)
delete_file        → Firestore 문서 삭제 + R2 객체 삭제 (복구 불가)

상세는 files.md 참조.

트리거 요약

functions/endpoints/con24/triggers.py에 등록된 Firestore 트리거:

트리거 문서 대상 함수 역할
companies/{cid}/members/{mid} _update_company_member_index 회사 멤버 search_index 동기화
companies/{cid}/sites/{sid}/members/{mid} _update_site_member_index 현장 근로자 search_index 동기화
companies/{cid}/sites/{sid}/equipments/{eid} _update_site_equipment_index 현장 장비 search_index 동기화
companies/{cid} _update_company_index 회사 인덱스 동기화
.../attendance_logs/{id} (create/update/delete) _on_attendance_log_* 대시보드/요약 집계 갱신
.../tasks/{tid}/material_usage/{did} (written) _on_material_usage_written 월별 자재 사용량 요약 갱신
.../tasks/{tid}/waste_amount/{did} (written) _on_waste_amount_written 월별 폐기물 요약 갱신
.../material_supplier/{sid}/material_cost/{date} (written) _on_material_cost_written 자재 공급자 집계 필드 갱신
.../other_expenses/{eid}/items/{iid} (written) _on_other_expense_item_written 기타 비용 카테고리 집계 갱신

다른 영역과의 관계

  • common: users/{uid}/notifications는 common 영역의 사용자 문서 하위 서브컬렉션이지만, 생성/조회 로직이 공통 시스템 기능이므로 여기에 문서화.
  • 전 서비스: files/{id}는 회사 관리/현장 관리/재무/안전 전 영역에서 공유. related_doc_idtags.type으로 소속 서비스 구분.