콘텐츠로 이동

companies/{company_id}/membership_requests 스키마

회사(기업) 가입 신청 요청 문서. _company_assign_request로 생성되고 _company_assign_request_approval / _company_assign_request_cancel로 종결됩니다. 사용자 입장에서는 users/{UID}/requests/{request_id}에 미러링되어 알림 목록에 노출됩니다.

저장 위치

companies/{company_id}/membership_requests/{request_id}

request_id는 자동 생성(database.write 반환 값)이며, 사용자의 users/{UID}/requests 문서의 request_path 필드에 이 컬렉션 경로가 저장됩니다.

상태 흐름

pending → approved  (승인 → members 생성 & users/{uid}/membership 생성 → FCM 알림)
pending → rejected  (거절 → FCM 알림)
pending → rejected  (본인 취소 → cancel)
  • pending: 기업 측 승인 대기
  • approved: 승인 완료 (멤버 등록됨)
  • rejected: 거절 또는 본인 취소

한 사용자는 여러 회사에 동시에 pending을 가질 수 없고(users/{UID}/requests에서 pending 1건 체크), 이미 다른 회사에 소속된 경우에도 차단됩니다(MEMBER_009).

문서 필드

필드 타입 설명
UID string 요청자 UID
status string "pending" | "approved" | "rejected"
created_at timestamp 요청 생성 시각
requester_name string 요청자 이름 (복호화된 평문)
requester_phone_masked string 마스킹된 전화번호 (예: "010-****-1234")
requester_phone_enc string 전화번호 AES 암호화 값 (승인 시 members 문서로 복사)
requester_email_enc string 이메일 AES 암호화 값
main_address string 주소 (평문)
sub_address_enc string 상세주소 암호화 값
requester_birth string 생년월일
requester_sex string 성별 ("male" | "female")
approved_at timestamp? 처리(승인/거절/취소) 시각, 초기값 null
approvalUID string? 처리자 UID (본인 취소면 본인 UID), 초기값 null
user_notification_id string 사용자 쪽 users/{UID}/requests/{doc_id} ID (상태 동기화에 사용)

승인 동작 (request_state=approved)

_company_assign_request_approval에서 role 파라미터를 받아 다음을 수행합니다.

  1. companies/{cid}/members/{UID} 생성 또는 재입사 업데이트 (role은 manager 또는 admin만 허용)
  2. users/{UID}/membership/{company_id} 생성 (company_id, company_name, site_id=null, site_name=null, role)
  3. 본 문서 update: status=approved, approved_at, approvalUID=UID
  4. users/{UID}/requests/{user_notification_id} update: status=approved
  5. 요청자에게 FCM 알림 (category=approved, notification_type=company_assign_approved)

재입사 케이스에서 기존 멤버가 resign=False이면 MEMBER_004 에러.

거절 / 취소 동작

  • 거절(request_state=rejected) / 본인 취소(_company_assign_request_cancel) 모두 status=rejected로 기록.
  • 본인 취소도 approvalUID=UID(본인), approved_at=SERVER_TIMESTAMP로 기록됨.
  • 거절 시 FCM 알림(category=rejected, notification_type=company_assign_rejected) 전송.

예시 문서 (approved)

{
  "UID": "firebase_uid_applicant",
  "status": "approved",
  "created_at": "2026-04-20T09:00:00Z",
  "requester_name": "홍길동",
  "requester_phone_masked": "010-****-1234",
  "requester_phone_enc": "encrypted_base64",
  "requester_email_enc": "encrypted_base64",
  "main_address": "서울특별시 강남구",
  "sub_address_enc": "encrypted_base64",
  "requester_birth": "1995-03-10",
  "requester_sex": "male",
  "approved_at": "2026-04-20T10:00:00Z",
  "approvalUID": "firebase_uid_owner",
  "user_notification_id": "user_request_doc_id"
}