deliveryman-api/app/models/address.py
2025-01-06 12:03:00 +08:00

58 lines
2.2 KiB
Python

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):
__tablename__ = "delivery_addresses"
id = Column(Integer, primary_key=True, autoincrement=True)
user_id = Column(Integer, ForeignKey("users.userid"), index=True)
community_id = Column(Integer, index=True)
community_building_id = Column(Integer, ForeignKey("community_buildings.id"), nullable=True)
community_building_name = Column(String(100), nullable=True)
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())
# Pydantic 模型
class AddressCreate(BaseModel):
community_id: int
community_building_id: Optional[int] = None
community_building_name: Optional[str] = Field(None, max_length=100)
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):
community_id: Optional[int] = None
community_building_id: Optional[int] = None
community_building_name: Optional[str] = Field(None, max_length=100)
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):
id: int
community_id: int
community_building_id: Optional[int]
community_building_name: Optional[str]
address_detail: str
name: str
phone: str
gender: Gender
is_default: bool
class Config:
from_attributes = True