""" Authentication schemas for request/response validation. Defines Pydantic models for user registration, login, and token management. """ from pydantic import BaseModel, EmailStr, Field from typing import Optional, TYPE_CHECKING from datetime import datetime class UserRegister(BaseModel): """User registration request schema.""" username: str = Field(..., min_length=3, max_length=50, description="用户名,3-50个字符") email: EmailStr = Field(..., description="有效的邮箱地址") password: str = Field(..., min_length=8, max_length=100, description="密码,至少8个字符") class UserLogin(BaseModel): """User login request schema.""" username: str = Field(..., description="用户名") password: str = Field(..., description="密码") class UserResponse(BaseModel): """User response schema.""" id: str = Field(..., description="用户ID") username: str = Field(..., description="用户名") email: str = Field(..., description="邮箱") role: str = Field(..., description="用户角色") created_at: datetime = Field(..., description="创建时间") class Config: from_attributes = True class TokenResponse(BaseModel): """Token response schema.""" access_token: str = Field(..., description="访问令牌") refresh_token: str = Field(..., description="刷新令牌") token_type: str = Field(default="bearer", description="令牌类型") user: UserResponse = Field(..., description="用户信息") class TokenRefresh(BaseModel): """Token refresh request schema.""" refresh_token: str = Field(..., description="刷新令牌") class TokenPayload(BaseModel): """JWT token payload schema.""" sub: str = Field(..., description="用户ID") username: str = Field(..., description="用户名") email: str = Field(..., description="邮箱") role: str = Field(..., description="角色") exp: datetime = Field(..., description="过期时间") iat: datetime = Field(..., description="签发时间") type: str = Field(..., description="令牌类型: access 或 refresh")