User Schema
사용자 정보를 저장하는 스키마입니다.
Fields
symId
- 타입: String
- 필수: true
- 고유: true
- 설명: Symverse 계정의 고유 ID
nickName
- 타입: String
- 필수: false
- 설명: 사용자의 닉네임 (선택사항)
- 제약: 도메인 내에서 유일해야 함
domain
- 타입: ObjectId (Domain 참조)
- 필수: true
- 설명: 사용자가 속한 도메인 정보
- 참조: Domain 컬렉션의 _id
role
- 타입: String (enum)
- 기본값: 'USER'
- 가능한 값:
- USER: 일반 사용자
- DOMAIN_USER: 도메인 사용자
- DOMAIN_ADMIN: 도메인 관리자
- SUPER_ADMIN: 최고 관리자
- 설명: 사용자의 권한 등급
referralCode
- 타입: String
- 고유: true
- 설명: 자동 생성되는 5자리 숫자 추천 코드 (10000-99999)
- 특징: 시스템 전체에서 유일한 값
referrerCode
- 타입: String
- 설명: 추천인의 추천 코드
parentId
- 타입: ObjectId (User 참조)
- 설명: 추천인의 사용자 ID
- 참조: User 컬렉션의 _id
- 특징: 도메인 관리자가 기본 추천인으로 설정됨
referralCount
- 타입: Number
- 기본값: 0
- 설명: 사용자가 추천한 총 인원 수
- 특징: 하위 사용자 추가 시 자동 증가
refreshToken
- 타입: String
- 설명: JWT 리프레시 토큰
- 용도: 액세스 토큰 갱신에 사용
tronAddress
- 타입: String
- 필수: true
- 설명: 사용자의 TRON 지갑 주소
- 형식: TRC20 주소 형식
rewardBalance
- 타입: Number
- 기본값: 0
- 설명: 사용자의 보상 잔액
- 특징: 추천 보상 지급 시 증가
referralPath
- 타입: [String]
- 기본값: []
- 설명: 추천인 경로 (추천 계보)
- 용도: 다단계 추천 관계 추적
isActive
- 타입: Boolean
- 기본값: true
- 설명: 사용자 계정 활성화 상태
- 용도: 계정 잠금/활성화 관리
level
- 타입: Number
- 기본값: 0
- 설명: 사용자의 레벨
- 용도: 추천 트리에서의 깊이 표시
인덱스
복합 인덱스
{ domain: 1, symId: 1 }: 도메인별 symId 유일성 보장{ domain: 1, nickName: 1 }: 도메인별 닉네임 유일성 보장
단일 인덱스
{ domain: 1 }: 도메인별 조회 최적화{ parentId: 1 }: 추천인 기준 조회 최적화{ referralCode: 1 }: 추천 코드 유일성 보장
Virtual Fields
domainInfo
- 참조: Domain
- 로컬 필드: domain
- 외래 필드: _id
- 특징: justOne (1:1 관계)
- 설명: 도메인 상세 정보를 가상 필드로 조회 가능
- 용도: 도메인 정보 populate 시 사용
타임스탬프
- createdAt: 사용자 생성 시간
- updatedAt: 정보 수정 시간
- 자동생성: true
참고사항
- symId와 referralCode는 시스템 전체에서 유일해야 함
- nickName은 도메인 내에서만 유일하면 됨
- 모든 사용자는 반드시 하나의 도메인에 속해야 함
- 추천인(parentId)은 같은 도메인 내의 사용자여야 함
- referralCode는 백엔드에서 자동 생성되며 수정 불가