增加配送地址的性别选择。

This commit is contained in:
aaron 2025-01-06 12:03:00 +08:00
parent 7712456ac2
commit 176d80a73d
2 changed files with 15 additions and 2 deletions

View File

@ -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 sqlalchemy.sql import func
from pydantic import BaseModel, Field from pydantic import BaseModel, Field
from .database import Base from .database import Base
from typing import Optional from typing import Optional
from app.models.user import Gender # 复用用户模型中的性别枚举
# 数据库模型 # 数据库模型
class AddressDB(Base): class AddressDB(Base):
@ -16,6 +17,7 @@ class AddressDB(Base):
address_detail = Column(String(200)) address_detail = Column(String(200))
name = Column(String(50)) name = Column(String(50))
phone = Column(String(11)) phone = Column(String(11))
gender = Column(Enum(Gender), nullable=False, default=Gender.UNKNOWN)
is_default = Column(Boolean, default=False) is_default = Column(Boolean, default=False)
create_time = Column(DateTime(timezone=True), server_default=func.now()) create_time = Column(DateTime(timezone=True), server_default=func.now())
update_time = Column(DateTime(timezone=True), onupdate=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) address_detail: str = Field(..., max_length=200)
name: str = Field(..., max_length=50) name: str = Field(..., max_length=50)
phone: str = Field(..., pattern="^1[3-9]\d{9}$") phone: str = Field(..., pattern="^1[3-9]\d{9}$")
gender: Gender = Gender.UNKNOWN
is_default: bool = False is_default: bool = False
class AddressUpdate(BaseModel): class AddressUpdate(BaseModel):
@ -37,6 +40,7 @@ class AddressUpdate(BaseModel):
address_detail: Optional[str] = Field(None, max_length=200) address_detail: Optional[str] = Field(None, max_length=200)
name: Optional[str] = Field(None, max_length=50) name: Optional[str] = Field(None, max_length=50)
phone: Optional[str] = Field(None, pattern="^1[3-9]\d{9}$") phone: Optional[str] = Field(None, pattern="^1[3-9]\d{9}$")
gender: Optional[Gender] = None
is_default: Optional[bool] = None is_default: Optional[bool] = None
class AddressInfo(BaseModel): class AddressInfo(BaseModel):
@ -47,6 +51,7 @@ class AddressInfo(BaseModel):
address_detail: str address_detail: str
name: str name: str
phone: str phone: str
gender: Gender
is_default: bool is_default: bool
class Config: class Config:

View File

@ -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.sql import func
from sqlalchemy.dialects.mysql import JSON from sqlalchemy.dialects.mysql import JSON
from pydantic import BaseModel, Field from pydantic import BaseModel, Field
@ -11,6 +11,11 @@ class UserRole(str, enum.Enum):
DELIVERYMAN = "deliveryman" DELIVERYMAN = "deliveryman"
ADMIN = "admin" ADMIN = "admin"
class Gender(str, enum.Enum):
MALE = "male"
FEMALE = "female"
UNKNOWN = "unknown"
# 数据库模型 # 数据库模型
class UserDB(Base): class UserDB(Base):
__tablename__ = "users" __tablename__ = "users"
@ -20,6 +25,7 @@ class UserDB(Base):
phone = Column(String(11), unique=True, index=True) phone = Column(String(11), unique=True, index=True)
password = Column(String(128), nullable=True) # 加密后的密码 password = Column(String(128), nullable=True) # 加密后的密码
avatar = Column(String(200), nullable=True) # 头像URL地址 avatar = Column(String(200), nullable=True) # 头像URL地址
gender = Column(Enum(Gender), nullable=False, default=Gender.UNKNOWN)
roles = Column(JSON, default=lambda: [UserRole.USER]) # 存储角色列表 roles = Column(JSON, default=lambda: [UserRole.USER]) # 存储角色列表
create_time = Column(DateTime(timezone=True), server_default=func.now()) create_time = Column(DateTime(timezone=True), server_default=func.now())
update_time = Column(DateTime(timezone=True), onupdate=func.now()) update_time = Column(DateTime(timezone=True), onupdate=func.now())
@ -34,6 +40,7 @@ class UserInfo(BaseModel):
username: str username: str
phone: str phone: str
avatar: Optional[str] = None avatar: Optional[str] = None
gender: Gender
roles: List[UserRole] roles: List[UserRole]
class Config: class Config:
@ -45,6 +52,7 @@ class VerifyCodeRequest(BaseModel):
class UserUpdate(BaseModel): class UserUpdate(BaseModel):
username: Optional[str] = Field(None, min_length=2, max_length=50) username: Optional[str] = Field(None, min_length=2, max_length=50)
avatar: Optional[str] = Field(None, max_length=200) avatar: Optional[str] = Field(None, max_length=200)
gender: Optional[Gender] = None
class Config: class Config:
extra = "forbid" # 禁止额外字段 extra = "forbid" # 禁止额外字段