deliveryman-api/app/models/user.py
2025-01-05 11:01:27 +08:00

49 lines
1.5 KiB
Python

from sqlalchemy import Column, String, DateTime,Integer, Boolean
from sqlalchemy.sql import func
from sqlalchemy.dialects.mysql import JSON
from pydantic import BaseModel, Field
from .database import Base
from typing import Optional, List
import enum
class UserRole(str, enum.Enum):
USER = "user"
DELIVERYMAN = "deliveryman"
ADMIN = "admin"
# 数据库模型
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)
avatar = Column(String(200), nullable=True) # 头像URL地址
roles = Column(JSON, default=lambda: [UserRole.USER]) # 存储角色列表
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
avatar: Optional[str] = None
roles: List[UserRole]
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" # 禁止额外字段