콘텐츠로 이동

users/{uid}/membership 스키마

사용자가 소속된 회사/현장/장비 관계 서브컬렉션. 한 사용자는 현재 같은 회사에 한해 여러 역할(회사 멤버, 현장 근로자, 장비 배정 등)을 가질 수 있습니다.

저장 위치

users/{uid}/membership/{membership_id}

membership_id는 role과 대상에 따라 결정됩니다:

역할 membership_id 규칙 비고
owner, admin, manager {company_id} 회사 가입 승인 시 생성 (con24/company/assign.py)
worker {company_id}_{site_id} 현장 배정 승인 시 생성 (con24/site/HR/worker_assign.py)
equipment {company_id}_{site_id}_{equipment_id} 장비 배정 승인 시 생성 (con24/site/HR/equipment_assign.py)

문서 필드

공통 필드 (모든 role)

필드 타입 설명
company_id string 소속 회사 문서 ID
company_name string? 소속 회사명 (owner/admin/manager/worker에 포함)
site_id string | null 소속 현장 문서 ID. 회사 레벨(owner/admin/manager)이면 null
site_name string | null 현장명. 회사 레벨이면 null
role string owner | admin | manager | worker | equipment
created_at timestamp 멤버십 생성 시각

장비 배정 시 추가 필드 (role == "equipment")

필드 타입 설명
equipment_id string users/{uid}/equipments의 개인 장비 문서 ID
equipment_name string 장비 모델명 (스냅샷)
equipment_type string 장비 구분 (스냅샷)
equipment_number string 차량 등록번호 (스냅샷)

상호 관계

  • 회원 탈퇴(withdraw)는 이 서브컬렉션에 문서가 하나라도 있으면 거부됩니다 (ErrorCode.USER_006).
  • 회사 가입 요청(company_assign_request)은 이 서브컬렉션을 스캔해 다른 회사 소속 여부를 확인합니다 (ErrorCode.MEMBER_009).
  • 현장 탈퇴/회사 탈퇴/장비 해제 시 해당 membership 문서가 삭제됩니다.

예시 문서

회사 owner

{
  "company_id": "company_abc",
  "company_name": "건설주식회사",
  "site_id": null,
  "site_name": null,
  "role": "owner",
  "created_at": "2026-04-01T00:00:00Z"
}

현장 worker (membership_id = "company_abc_site_xyz")

{
  "company_id": "company_abc",
  "company_name": "건설주식회사",
  "site_id": "site_xyz",
  "site_name": "A현장",
  "role": "worker",
  "created_at": "2026-04-10T00:00:00Z"
}

장비 (membership_id = "company_abc_site_xyz_equipment_123")

{
  "company_id": "company_abc",
  "site_id": "site_xyz",
  "site_name": "A현장",
  "equipment_id": "equipment_123",
  "equipment_name": "현대 25톤 덤프",
  "equipment_type": "덤프트럭",
  "equipment_number": "12가 3456",
  "role": "equipment",
  "created_at": "2026-04-12T00:00:00Z"
}