콘텐츠로 이동

common 영역 DB 스키마

공통(인증/사용자/알림/문의) 영역에서 쓰는 Firestore 컬렉션 스키마 모음. 개별 엔드포인트 문서에서 참조용으로 사용합니다.

컬렉션 맵

users/{uid}                           # 사용자 본문 (프로필, 소셜 연동, 로그인 상태 등)
 ├─ membership/{membership_id}        # 회사/현장/장비 소속 관계
 ├─ equipments/{equipment_id}         # 개인 소유 장비
 ├─ notifications/{notification_id}   # 인앱 알림
 ├─ requests/{request_id}             # 가입/출근 등 승인 대기 요청
 ├─ login_logs/{log_id}               # 로그인 성공 기록
 ├─ inquiries/{inquiry_id}            # 사용자 문의사항
 ├─ certificates/{certificate_id}     # 워크마루 자격증 → workmaru 영역 참조
 └─ resumes/{resume_id}               # 워크마루 이력서 → workmaru 영역 참조

문서 목록

컬렉션 스키마 문서 설명
users/{uid} users.md 사용자 프로필, 암호화 필드, 소셜 연동, 로그인 시도/잠금, FCM 토큰
users/{uid}/membership/{id} membership.md 회사/현장/장비 소속. role = owner/admin/manager/worker/equipment
users/{uid}/equipments/{id} equipments.md 장비 소유자 기준 개인 장비 목록
users/{uid}/notifications/{id} notifications.md 인앱 알림 (푸시 수신 내역, 읽음 여부)
users/{uid}/requests/{id} requests.md 회사/현장 가입, 출근, 현장 변경 등 요청 상태

암호화 3종 패턴

개인정보는 다음 3종으로 저장됩니다 (see users.md):

  • {field}_enc: AES-CBC 암호화 (랜덤 IV)
  • {field}_hash: SHA256(value + SALT) — 비교/검색용
  • {field}: 평문 (민감도 낮은 필드만)

다른 영역과의 관계

  • company / site: 회사·현장 가입 승인 시 users/{uid}/membership이 생성되며, 회사 멤버(companies/{cid}/members/{uid})와 현장 멤버(companies/{cid}/sites/{sid}/members/{uid}) 문서가 함께 쓰입니다.
  • system: 알림/파일/FCM 토큰은 공통 영역과 시스템 영역이 함께 사용합니다. 파일 메타는 system/_schema/files.md 참조.
  • workmaru: users/{uid}/certificates, users/{uid}/resumes는 워크마루 서비스 전용이므로 workmaru/_schema/README.md 참조.

탈퇴(withdraw) 시 정리 대상

withdraw 호출 시 다음 서브컬렉션이 삭제됩니다:

  • users/{uid}/equipments/*
  • users/{uid}/certificates/*
  • users/{uid}/resumes/*
  • users/{uid}/requests/*
  • users/{uid}/inquiries/*

users/{uid}/membership에 하나라도 남아있으면 탈퇴가 거부됩니다. users/{uid} 본문은 삭제하지 않고 개인정보 필드만 마스킹/삭제한 채 withdrawn=True로 표시됩니다.