equipment_assign_requests 스키마 (장비 배정 요청)
사용자가 보유한 개인 장비(
users/{uid}/equipments/{equipment_id})를 특정 현장에 배정해달라고 요청하는 문서. 승인 시 현장equipments/{equipment_id}문서가 생성되고 사용자 쪽 membership이 생성됩니다 (role="equipment").
저장 위치
request_id: Firestore 자동 생성 ID- 요청자 UID의
users/{uid}/requests문서와 1:1 쌍 (user_notification_id)
상태 흐름
pending ──(관리자 승인)──► approved → equipments 생성 + membership 생성
│
├──(관리자 거절)──────► rejected
│
└──(요청자 취소)──────► rejected (approvalUID = 요청자 본인)
| 상태 | 설명 | 영향 |
|---|---|---|
pending |
요청 등록 직후 | 같은 사용자의 equipment_membership pending 요청은 1개만 허용 |
approved |
관리자 승인 | 현장 equipments/{equipment_id} 생성/복구, users/{uid}/membership/{cid}_{sid}_{equipment_id} 생성/업데이트, FCM 승인 알림 |
rejected |
관리자 거절 또는 요청자 취소 | 어떤 문서도 만들지 않음. 거절 시 FCM 거절 알림 |
문서 필드
| 필드 | 타입 | 설명 |
|---|---|---|
UID |
string | 요청자 (장비 소유자) UID |
status |
string | pending | approved | rejected |
equipment_id |
string | 배정하려는 개인 장비 문서 ID (users/{uid}/equipments/{equipment_id}) |
requester_name |
string | 요청자 이름 (평문 스냅샷) |
requester_phone_masked |
string | 마스킹된 전화번호 |
requester_phone_enc |
string | 암호화된 전화번호 |
requester_email_enc |
string | 암호화된 이메일 |
main_address |
string | 주소 |
sub_address_enc |
string | 암호화된 상세 주소 |
requester_birth |
timestamp | 생년월일 |
requester_sex |
string | "male" | "female" |
user_notification_id |
string | 사용자 쪽 users/{uid}/requests/{id} 문서 ID |
created_at |
timestamp | 요청 생성 시각 (SERVER_TIMESTAMP) |
approved_at |
timestamp | null | 처리 시각 |
approvalUID |
string | null | 처리자 UID (요청자 취소 시 요청자 본인) |
장비 상세(
equipment_type/equipment_name/equipment_number)는 이 요청 문서에는 저장되지 않습니다. 승인 시점에users/{uid}/equipments/{equipment_id}에서 직접 조회하여 현장 equipments 문서에 스냅샷 저장합니다.
요청 생성 시 선검사
_equipment_assign_request는 다음을 검사 후 실패 시 거부합니다:
- 요청자의 개인 장비(
users/{UID}/equipments/{equipment_id})가 존재해야 함 (EQUIPMENT_001) - 동일 사용자의
equipment_membershippending 요청이 이미 있으면 거부 (EQUIPMENT_008) - 다른 회사 소속 membership이 있으면 거부 (
MEMBER_009). 같은 회사 내 복수 역할은 허용. - 현장이 존재하고
status="activate"이어야 함 (SITE_001/SITE_003) - 이미 동일 현장에
equipments/{equipment_id}문서가 있으면 거부 (EQUIPMENT_002)
승인 시 생성/갱신되는 문서
equipments/{equipment_id}생성 또는 복구- 경로:
companies/{company_id}/sites/{site_id}/equipments/{equipment_id} - doc_id =
equipment_id(개인 장비 ID와 동일) - 기존 문서가 있으면
resign=False로 업데이트(복구), 없으면 신규 생성 - 저장 필드(주요):
UID,name,phone_enc,phone_masked,email_enc,main_address,sub_address_enc,birth,sex,equipment_type,equipment_name,equipment_number,resign=False,assigned_by,assigned_at users/{uid}/membership/{cid}_{sid}_{equipment_id}생성 또는 업데이트 — common/_schema/membership.md- doc_id =
{company_id}_{site_id}_{equipment_id}형식 role: "equipment",site_name,equipment_name/equipment_type/equipment_number스냅샷 포함users/{uid}/requests/{notification_id}갱신status: "approved"— common/_schema/requests.md- FCM 알림 전송
- 제목:
[배정] 장비 배정 승인 notification_type: "equipment_assign_approved"
거절/취소 시 동작
| 경우 | 처리 |
|---|---|
| 관리자 거절 | status="rejected" + approvalUID=관리자UID. 사용자 쪽 requests도 rejected. FCM 거절 알림 (notification_type: "equipment_assign_rejected") |
| 요청자 취소 | status="rejected" + approvalUID=요청자UID. 사용자 쪽 requests도 rejected. FCM 알림 없음 |
예시 문서 (pending)
{
"UID": "uid_owner",
"status": "pending",
"equipment_id": "equipment_123",
"requester_name": "홍길동",
"requester_phone_masked": "010-****-1234",
"requester_phone_enc": "base64...",
"requester_email_enc": "base64...",
"main_address": "서울시 강남구",
"sub_address_enc": "base64...",
"requester_birth": "1975-03-20T00:00:00Z",
"requester_sex": "male",
"user_notification_id": "notif_xyz",
"created_at": "2026-04-20T09:00:00Z",
"approved_at": null,
"approvalUID": null
}
예시 문서 (approved)
{
"UID": "uid_owner",
"status": "approved",
"equipment_id": "equipment_123",
"requester_name": "홍길동",
"requester_phone_masked": "010-****-1234",
"requester_phone_enc": "base64...",
"requester_email_enc": "base64...",
"main_address": "서울시 강남구",
"sub_address_enc": "base64...",
"requester_birth": "1975-03-20T00:00:00Z",
"requester_sex": "male",
"user_notification_id": "notif_xyz",
"created_at": "2026-04-20T09:00:00Z",
"approved_at": "2026-04-20T11:00:00Z",
"approvalUID": "uid_admin"
}
관련 엔드포인트
_equipment_assign_request(con24/site/HR/equipment_assign.py) — 요청 생성_equipment_assign_request_cancel— 요청자 취소_equipment_assign_request_approval— 관리자 승인/거절 (배열 처리 지원)_equipment_resign— 장비 해제 (승인 후 해제할 때. 이 문서가 아닌equipments/{equipment_id}자체를resign=True로 전환)
관련 스키마
companies/{cid}/sites/{sid}/equipments/{eid}— 승인 시 생성되는 현장 장비 문서 (개별 스키마 문서 미작성)- common/_schema/requests.md — 사용자 쪽 요청 미러 (
request_type: "equipment_membership") - common/_schema/membership.md — 승인 시 생성되는 사용자 멤버십 (
role: "equipment") - common/_schema/equipments.md — 개인 장비 마스터 (
users/{uid}/equipments/{equipment_id}) - equipment_change_requests.md — 장비 현장 변경 요청 (배정 후)