diff --git a/app/models/address.py b/app/models/address.py index 98f85e5..a934b1d 100644 --- a/app/models/address.py +++ b/app/models/address.py @@ -1,8 +1,9 @@ -from sqlalchemy import Column, Integer, String, ForeignKey, DateTime, Boolean +from sqlalchemy import Column, Integer, String, ForeignKey, DateTime, Boolean, Enum from sqlalchemy.sql import func from pydantic import BaseModel, Field from .database import Base from typing import Optional +from app.models.user import Gender # 复用用户模型中的性别枚举 # 数据库模型 class AddressDB(Base): @@ -16,6 +17,7 @@ class AddressDB(Base): address_detail = Column(String(200)) name = Column(String(50)) phone = Column(String(11)) + gender = Column(Enum(Gender), nullable=False, default=Gender.UNKNOWN) is_default = Column(Boolean, default=False) create_time = Column(DateTime(timezone=True), server_default=func.now()) update_time = Column(DateTime(timezone=True), onupdate=func.now()) @@ -28,6 +30,7 @@ class AddressCreate(BaseModel): address_detail: str = Field(..., max_length=200) name: str = Field(..., max_length=50) phone: str = Field(..., pattern="^1[3-9]\d{9}$") + gender: Gender = Gender.UNKNOWN is_default: bool = False class AddressUpdate(BaseModel): @@ -37,6 +40,7 @@ class AddressUpdate(BaseModel): address_detail: Optional[str] = Field(None, max_length=200) name: Optional[str] = Field(None, max_length=50) phone: Optional[str] = Field(None, pattern="^1[3-9]\d{9}$") + gender: Optional[Gender] = None is_default: Optional[bool] = None class AddressInfo(BaseModel): @@ -47,6 +51,7 @@ class AddressInfo(BaseModel): address_detail: str name: str phone: str + gender: Gender is_default: bool class Config: diff --git a/app/models/user.py b/app/models/user.py index 8c91eda..c671025 100644 --- a/app/models/user.py +++ b/app/models/user.py @@ -1,4 +1,4 @@ -from sqlalchemy import Column, String, DateTime,Integer, Boolean +from sqlalchemy import Column, String, DateTime, Integer, Boolean, Enum from sqlalchemy.sql import func from sqlalchemy.dialects.mysql import JSON from pydantic import BaseModel, Field @@ -11,6 +11,11 @@ class UserRole(str, enum.Enum): DELIVERYMAN = "deliveryman" ADMIN = "admin" +class Gender(str, enum.Enum): + MALE = "male" + FEMALE = "female" + UNKNOWN = "unknown" + # 数据库模型 class UserDB(Base): __tablename__ = "users" @@ -20,6 +25,7 @@ class UserDB(Base): phone = Column(String(11), unique=True, index=True) password = Column(String(128), nullable=True) # 加密后的密码 avatar = Column(String(200), nullable=True) # 头像URL地址 + gender = Column(Enum(Gender), nullable=False, default=Gender.UNKNOWN) 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()) @@ -34,6 +40,7 @@ class UserInfo(BaseModel): username: str phone: str avatar: Optional[str] = None + gender: Gender roles: List[UserRole] class Config: @@ -45,6 +52,7 @@ class VerifyCodeRequest(BaseModel): class UserUpdate(BaseModel): username: Optional[str] = Field(None, min_length=2, max_length=50) avatar: Optional[str] = Field(None, max_length=200) + gender: Optional[Gender] = None class Config: extra = "forbid" # 禁止额外字段