from sqlalchemy import Column, Integer, ForeignKey, DateTime, UniqueConstraint from sqlalchemy.sql import func from pydantic import BaseModel, Field from typing import Optional, List from datetime import datetime from .database import Base from .timeperiod import TimePeriodInfo # 数据库模型 class CommunityTimePeriodDB(Base): """社区配送时段关联表""" __tablename__ = "community_time_periods" id = Column(Integer, primary_key=True, autoincrement=True) community_id = Column(Integer, ForeignKey("communities.id"), nullable=False, index=True) time_period_id = Column(Integer, ForeignKey("time_periods.id"), nullable=False) capacity = Column(Integer, default=0, nullable=False) # 运力(订单量),0表示无限制 create_time = Column(DateTime(timezone=True), server_default=func.now()) update_time = Column(DateTime(timezone=True), onupdate=func.now()) # 确保每个社区的每个时段只有一条记录 __table_args__ = ( UniqueConstraint('community_id', 'time_period_id', name='uix_community_time_period'), ) # Pydantic 模型 class CommunityTimePeriodCreate(BaseModel): community_id: int = Field(..., description="社区ID") time_period_id: int = Field(..., description="配送时段ID") capacity: int = Field(0, description="运力(订单量),0表示无限制") class CommunityTimePeriodUpdate(BaseModel): capacity: int = Field(..., description="运力(订单量),0表示无限制") class CommunityTimePeriodInfo(BaseModel): id: int community_id: int time_period_id: int capacity: int create_time: datetime update_time: Optional[datetime] = None class Config: from_attributes = True class CommunityTimePeriodWithDetail(CommunityTimePeriodInfo): time_period: Optional[TimePeriodInfo] = None class CommunityTimePeriodWithCapacity(BaseModel): community_id: int time_period_id: int capacity: int class CommunityTimePeriodBatchCreate(BaseModel): community_id: int = Field(..., description="社区ID") time_period_capacity_list: List[CommunityTimePeriodWithCapacity] = Field(..., description="配送时段ID列表")