콘텐츠로 이동

companies/{company_id}/sites/{site_id}/supervisor 스키마

현장 감독자 문서. 회사 멤버(companies/{cid}/members)가 특정 현장에 접근 권한을 가질 때 해당 현장의 supervisor 서브컬렉션에 스냅샷이 복사됩니다. 이 컬렉션은 companies/{cid}/members 문서의 복사본 + 할당 메타로 구성되며, 현장 단위에서 감독자 목록을 빠르게 조회하기 위한 용도입니다.

저장 위치

companies/{company_id}/sites/{site_id}/supervisor/{UID}

문서 ID는 감독자의 UID와 동일합니다.

생성/삭제 흐름

_set_site_rules (여러 현장의 allowed_sites를 한번에 변경)
  ├── added_sites: 각 현장 supervisor에 문서 write
  └── removed_sites: 해당 현장 supervisor의 UID 문서 delete

_add_site_supervisor (단일 현장에 추가)
  ├── members.{UID}.allowed_sites에 site_id ArrayUnion
  └── supervisor/{UID} write (멤버 정보 전체 복사 + 할당 메타)

_delete_site_supervisor (단일 현장에서 제거)
  ├── members.{UID}.allowed_sites에서 site_id 제거
  └── supervisor에서 UID 문서 delete

_company_resign (멤버 탈퇴)
  └── 모든 현장 supervisor에서 해당 UID 문서 일괄 delete

site/registration.py (현장 생성)
  ├── 요청자(UID) supervisor에 추가
  └── 감독자(supervisor_UID) supervisor에 추가 (요청자와 다를 때)

문서 필드

companies/{cid}/members/{UID} 문서의 필드를 통째로 복사하고 할당 메타 2개를 추가합니다. 주요 필드는 다음과 같습니다.

필드 타입 설명
UID string 감독자 UID (문서 ID와 동일)
name string 이름
phone_enc string 전화번호 암호화
email_enc string 이메일 암호화
phone_masked string 마스킹 전화번호
main_address string 주소
sub_address_enc string 상세주소 암호화
birth string 생년월일
sex string 성별
role string "owner" | "admin" | "manager"
position string 직급
field string 직종
labor_supplier string 인력 공급처
wage_rate number 일당
allowed_sites string[] members의 allowed_sites 복사 시점 값 (참고용, 권한 소스는 members가 최신)
allowed_pages string[] members의 allowed_pages 복사 시점 값
approved_UID string 회사 가입 승인자 UID
created_at timestamp 회사 가입 시각
resign boolean 퇴사 여부 (할당 시점은 항상 false)
fcm_token string? FCM 토큰
assigned_by_UID string (추가) 현장 감독으로 할당한 사람의 UID
assigned_at timestamp (추가) 감독 할당 시각

데이터 동기화 주의사항

  • 이 문서는 할당 시점의 스냅샷입니다. members 문서가 업데이트되어도 자동으로 동기화되지 않습니다 (현재 코드 경로상 트리거 확인 안 됨).
  • 권한 체크는 check_company_permission에서 members.allowed_sites를 기준으로 합니다. supervisor 컬렉션은 "현장 단위에서 누가 감독인지 빠르게 조회"할 때 사용됩니다.
  • 퇴사 시 _company_resign이 전 현장을 순회하며 supervisor 문서를 삭제합니다.

예시 문서

{
  "UID": "firebase_uid_manager",
  "name": "박매니저",
  "phone_enc": "encrypted_base64",
  "email_enc": "encrypted_base64",
  "phone_masked": "010-****-9876",
  "main_address": "서울특별시 서초구",
  "sub_address_enc": "encrypted_base64",
  "birth": "1988-07-20",
  "sex": "female",
  "role": "manager",
  "position": "대리",
  "field": "안전관리자",
  "labor_supplier": "직영",
  "wage_rate": 120000,
  "allowed_sites": ["site_1", "site_2"],
  "allowed_pages": ["홈", "즐겨찾기", "노임대장"],
  "approved_UID": "firebase_uid_owner",
  "created_at": "2026-04-15T09:30:00Z",
  "resign": false,
  "assigned_by_UID": "firebase_uid_owner",
  "assigned_at": "2026-04-18T14:00:00Z"
}