first commit
This commit is contained in:
44
MeetSpot/app/models/user.py
Normal file
44
MeetSpot/app/models/user.py
Normal file
@@ -0,0 +1,44 @@
|
||||
"""用户相关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
|
||||
|
||||
Reference in New Issue
Block a user