from sqlalchemy import Column, String, DateTime,Integer, Boolean from sqlalchemy.sql import func from pydantic import BaseModel, Field from .database import Base from typing import Optional # 数据库模型 class UserDB(Base): __tablename__ = "users" userid = Column(Integer, primary_key=True,autoincrement=True, index=True) username = Column(String(50)) phone = Column(String(11), unique=True, index=True) is_admin = Column(Boolean, default=False) create_time = Column(DateTime(timezone=True), server_default=func.now()) update_time = Column(DateTime(timezone=True), onupdate=func.now()) # Pydantic 模型 class UserLogin(BaseModel): phone: str = Field(..., pattern="^1[3-9]\d{9}$") verify_code: str = Field(..., min_length=6, max_length=6) class UserInfo(BaseModel): userid: int username: str phone: str is_admin: bool class Config: from_attributes = True class VerifyCodeRequest(BaseModel): phone: str = Field(..., pattern="^1[3-9]\d{9}$") class UserUpdate(BaseModel): username: Optional[str] = Field(None, min_length=2, max_length=50) avatar: Optional[str] = Field(None, max_length=200) class Config: extra = "forbid" # 禁止额外字段