from pydantic import BaseModel, Field, EmailStr from typing import Optional, List from datetime import datetime class UserBase(BaseModel): """用户基础模式""" id: Optional[str] = None username: str = Field(..., description="用户名") email: EmailStr = Field(..., description="邮箱") role: str = Field(default="user", description="用户角色") class UserCreate(UserBase): """创建用户模式""" password: str = Field(..., description="密码") class UserUpdate(BaseModel): """更新用户模式""" username: Optional[str] = None email: Optional[EmailStr] = None role: Optional[str] = None status: Optional[str] = None password: Optional[str] = None class UserResponse(UserBase): """用户响应模式""" status: str created_at: datetime updated_at: Optional[datetime] = None class UserListResponse(BaseModel): """用户列表响应模式""" users: List[UserResponse] total: int class Token(BaseModel): """令牌模式""" access_token: str token_type: str = "bearer" class TokenData(BaseModel): """令牌数据模式""" username: Optional[str] = None user_id: Optional[str] = None class LoginRequest(BaseModel): """登录请求模式""" username: str = Field(..., description="用户名") password: str = Field(..., description="密码") class APIKeyBase(BaseModel): """API密钥基础模式""" id: Optional[str] = None user_id: str = Field(..., description="用户ID") name: str = Field(..., description="密钥名称") class APIKeyCreate(APIKeyBase): """创建API密钥模式""" expires_at: datetime = Field(..., description="过期时间") class APIKeyResponse(APIKeyBase): """API密钥响应模式""" key: str expires_at: datetime status: str created_at: datetime updated_at: Optional[datetime] = None class APIKeyListResponse(BaseModel): """API密钥列表响应模式""" api_keys: List[APIKeyResponse] total: int