From 176d80a73d34ec14afc94946883a644b77a41c3a Mon Sep 17 00:00:00 2001 From: aaron <> Date: Mon, 6 Jan 2025 12:03:00 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=85=8D=E9=80=81=E5=9C=B0?= =?UTF-8?q?=E5=9D=80=E7=9A=84=E6=80=A7=E5=88=AB=E9=80=89=E6=8B=A9=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/address.py | 7 ++++++- app/models/user.py | 10 +++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) 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" # 禁止额外字段