"""회원가입 요청 스키마.""" from typing import Literal from pydantic import BaseModel, EmailStr, Field, model_validator class RegisterRequest(BaseModel): email: EmailStr password: str = Field(min_length=8, max_length=128) name: str = Field(min_length=1, max_length=255) account_type: Literal["MASTER", "MEMBER"] company_id: int | None = Field(default=None, ge=1) company_name: str | None = Field(default=None, max_length=255) business_number: str | None = Field(default=None, max_length=20) phone_number: str | None = Field(default=None, max_length=20) address: str | None = Field(default=None, max_length=255) representative_name: str | None = Field(default=None, max_length=100) terms_version: str = Field(min_length=1, max_length=20) terms_agreed: bool privacy_agreed: bool marketing_agreed: bool = False @model_validator(mode="after") def validate_account_type(self): if not self.terms_agreed or not self.privacy_agreed: raise ValueError("필수 약관 동의가 필요합니다.") if self.account_type == "MASTER" and not self.company_name: raise ValueError("새 회사명은 필수입니다.") if self.account_type == "MEMBER" and self.company_id is None: raise ValueError("참여할 회사를 선택해야 합니다.") return self class RegisterVerifyRequest(BaseModel): email: EmailStr otp_code: str = Field(pattern=r"^\d{6}$")