deliveryman-api/app/models/community.py
2025-01-08 00:46:37 +08:00

50 lines
1.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from typing import Optional
import enum
from sqlalchemy import Column, Integer, String, DECIMAL, DateTime, Enum
from sqlalchemy.sql import func
from pydantic import BaseModel, Field
from .database import Base
class CommunityStatus(str, enum.Enum):
UNOPEN = "UNOPEN" # 未运营
OPENING = "OPENING" # 已运营
# 数据库模型
class CommunityDB(Base):
__tablename__ = "communities"
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String(100), nullable=False)
address = Column(String(200), nullable=False)
longitude = Column(DECIMAL(9,6), nullable=False) # 经度精确到小数点后6位
latitude = Column(DECIMAL(9,6), nullable=False) # 纬度精确到小数点后6位
status = Column(Enum(CommunityStatus), nullable=False, default=CommunityStatus.UNOPEN)
create_time = Column(DateTime(timezone=True), server_default=func.now())
update_time = Column(DateTime(timezone=True), onupdate=func.now())
# Pydantic 模型
class CommunityCreate(BaseModel):
name: str = Field(..., max_length=100)
address: str = Field(..., max_length=200)
longitude: float = Field(..., ge=-180, le=180)
latitude: float = Field(..., ge=-90, le=90)
status: CommunityStatus = Field(default=CommunityStatus.UNOPEN)
class CommunityUpdate(BaseModel):
name: Optional[str] = Field(None, max_length=100)
address: Optional[str] = Field(None, max_length=200)
longitude: Optional[float] = Field(None, ge=-180, le=180)
latitude: Optional[float] = Field(None, ge=-90, le=90)
status: Optional[CommunityStatus] = None
class CommunityInfo(BaseModel):
id: int
name: str
address: str
latitude: float
longitude: float
status: CommunityStatus
distance: Optional[float] = None # 距离,单位:米
class Config:
from_attributes = True