74 lines
1.8 KiB
Python
74 lines
1.8 KiB
Python
# app/models/schemas/users.py
|
||
from typing import Optional
|
||
|
||
from pydantic import BaseModel, EmailStr, Field
|
||
|
||
from app.models.domain.users import User
|
||
from app.models.schemas.rwschema import RWSchema
|
||
|
||
|
||
# ===============================
|
||
# 旧有登录/创建(兼容保留)
|
||
# ===============================
|
||
class UserInLogin(RWSchema):
|
||
email: EmailStr
|
||
password: str
|
||
|
||
|
||
class UserInCreate(UserInLogin):
|
||
username: str
|
||
|
||
|
||
class UserInUpdate(BaseModel):
|
||
username: Optional[str] = None
|
||
email: Optional[EmailStr] = None
|
||
password: Optional[str] = None
|
||
bio: Optional[str] = None
|
||
image: Optional[str] = None
|
||
phone: Optional[str] = None
|
||
user_type: Optional[str] = None
|
||
company_name: Optional[str] = None
|
||
|
||
|
||
# ===============================
|
||
# 新增:邮箱验证码注册/登录/Token
|
||
# ===============================
|
||
class SendEmailCodeIn(RWSchema):
|
||
"""发送邮箱验证码"""
|
||
email: EmailStr
|
||
# 可选场景:register/reset/login,不传默认 register
|
||
scene: Optional[str] = "register"
|
||
|
||
|
||
class RegisterWithEmailIn(RWSchema):
|
||
"""邮箱注册:邮箱 + 密码 + 确认密码 + 验证码"""
|
||
email: EmailStr
|
||
password: str = Field(min_length=6, max_length=64)
|
||
confirm_password: str = Field(min_length=6, max_length=64)
|
||
code: str = Field(min_length=4, max_length=8)
|
||
|
||
|
||
class LoginWithPasswordIn(RWSchema):
|
||
"""邮箱 + 密码登录"""
|
||
email: EmailStr
|
||
password: str
|
||
|
||
|
||
class TokenOut(RWSchema):
|
||
token: str
|
||
token_type: str = "Token"
|
||
|
||
|
||
# ===============================
|
||
# 响应模型(带 email_verified)
|
||
# ===============================
|
||
class UserWithToken(User):
|
||
token: str
|
||
phone: Optional[str] = None
|
||
user_type: Optional[str] = None
|
||
company_name: Optional[str] = None
|
||
|
||
|
||
class UserInResponse(RWSchema):
|
||
user: UserWithToken
|