45 lines
1.1 KiB
Python
45 lines
1.1 KiB
Python
"""用户相关SQLAlchemy模型与Pydantic模式。"""
|
||
|
||
import uuid
|
||
from datetime import datetime
|
||
from typing import Optional
|
||
|
||
from pydantic import BaseModel, Field
|
||
from sqlalchemy import Column, DateTime, String, func
|
||
|
||
from app.db.database import Base
|
||
|
||
|
||
def _generate_uuid() -> str:
|
||
return str(uuid.uuid4())
|
||
|
||
|
||
class User(Base):
|
||
__tablename__ = "users"
|
||
|
||
id = Column(String(36), primary_key=True, default=_generate_uuid)
|
||
phone = Column(String(20), unique=True, nullable=False)
|
||
nickname = Column(String(50), nullable=False)
|
||
avatar_url = Column(String(255), default="")
|
||
created_at = Column(DateTime(timezone=True), server_default=func.now())
|
||
last_login = Column(DateTime(timezone=True))
|
||
|
||
|
||
class UserCreate(BaseModel):
|
||
phone: str = Field(..., description="手机号")
|
||
nickname: Optional[str] = Field(None, description="昵称,可选")
|
||
avatar_url: Optional[str] = Field("", description="头像URL,可选")
|
||
|
||
|
||
class UserRead(BaseModel):
|
||
id: str
|
||
phone: str
|
||
nickname: str
|
||
avatar_url: str = ""
|
||
created_at: datetime
|
||
last_login: Optional[datetime] = None
|
||
|
||
class Config:
|
||
from_attributes = True
|
||
|