Files
Aislo/docs/wiki/pages/A07_Register/A07_backend.md
T
2026-07-15 18:33:33 +09:00

2.6 KiB

status, page_id, related_pages, last_updated
status page_id related_pages last_updated
stable A07_Register
A07_Register/A07_frontend
A06_Login/A06_backend
auth_rbac
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): 필수 약관 동의 확인 + 비밀번호 일치 확인

가입 로직 흐름

  1. register/request:
    • 기존 이메일 조회 → PENDING_EMAIL이 아니면 409(이미 등록됨)
    • PENDING_EMAIL(미인증)이면 refresh_pending_registration()으로 갱신
    • 신규면 create_registration()으로 생성
    • OTP 생성·해시 저장·메일 발송
  2. register/verify:
    • PENDING_EMAIL 상태 확인 → OTP 검증(만료/해시) → 소비
    • complete_registration() → 상태 NO_COMPANY로 전환
    • 회사 생성/연결은 로그인 후 B01_Dashboard에서 진행 (가입 시점엔 회사 없음)

의존성 (공통 유틸)

  • common_utilcommon_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