2.6 KiB
2.6 KiB
status, page_id, related_pages, last_updated
| status | page_id | related_pages | last_updated | |||
|---|---|---|---|---|---|---|
| stable | A07_Register |
|
2026-07-12 |
A07_Register — Backend
회원가입(2단계: 요청 → OTP 검증) + 회사 검색 API. prefix /api/auth (A06_Login/A06_backend와 공유).
파일 구조
| 파일 | 위치 | 역할 |
|---|---|---|
A07_Register_Router.py |
A07_Register/A07_Register_Router.py:1-76 |
회원가입/회사검색 API 라우터 |
A07_Register_Schema.py |
A07_Register/A07_Register_Schema.py:1-30 |
요청 검증 Pydantic 모델 2종 |
API 엔드포인트
| 엔드포인트 | 위치 | 역할 |
|---|---|---|
GET /api/auth/companies?q= |
A07_Register/A07_Register_Router.py:26 |
회사명 검색(1~100자) → id/name 목록 |
POST /api/auth/register/request |
A07_Register/A07_Register_Router.py:31 |
1차 가입 요청(202). OTP 메일 발송, PENDING_EMAIL 계정 생성 |
POST /api/auth/register/verify |
A07_Register/A07_Register_Router.py:56 |
OTP 검증 → 가입 완료(NO_COMPANY 상태) |
요청 스키마 (Pydantic)
| 모델 | 위치 | 필드 |
|---|---|---|
RegisterRequest |
A07_Register/A07_Register_Schema.py:6 |
email, password/password_confirm(8~128), name, position?, phone?, terms_version, terms_agreed, privacy_agreed, marketing_agreed |
RegisterVerifyRequest |
A07_Register/A07_Register_Schema.py:27 |
email(EmailStr), otp_code(정규식 ^\d{6}$) |
RegisterRequest.validate_registration(model_validator): 필수 약관 동의 확인 + 비밀번호 일치 확인
가입 로직 흐름
register/request:- 기존 이메일 조회 →
PENDING_EMAIL이 아니면 409(이미 등록됨) PENDING_EMAIL(미인증)이면refresh_pending_registration()으로 갱신- 신규면
create_registration()으로 생성 - OTP 생성·해시 저장·메일 발송
- 기존 이메일 조회 →
register/verify:PENDING_EMAIL상태 확인 → OTP 검증(만료/해시) → 소비complete_registration()→ 상태NO_COMPANY로 전환- 회사 생성/연결은 로그인 후 B01_Dashboard에서 진행 (가입 시점엔 회사 없음)
의존성 (공통 유틸)
- common_util —
common_util_auth(OTP/해시),common_util_auth_repository(가입/회사검색 DB),common_util_email(메일) - 사용자 상태 생명주기(PENDING_EMAIL → NO_COMPANY) → auth_rbac
- 회원 테이블 → db_schema/users_auth
참고
- 회원가입은 회사 없이 완료됨(NO_COMPANY). 회사 검색 API는 프론트 자동완성용이나, 실제 회사 연결은 B01_Dashboard에서 처리 → B01_Dashboard/B01_backend