from pydantic import BaseModel, Field from typing import Optional import uuid from datetime import date, datetime class VisitCreate(BaseModel): customer_id: uuid.UUID visit_date: str # "YYYY-MM-DD" visit_method: str = "上门" time_range: str = "" visitor_name: str = "" visitor_phone: str = "" communication_content: str = "" customer_demand: str = "" companions: list[uuid.UUID] = [] photos: list[str] = [] class VisitUpdate(BaseModel): customer_id: Optional[uuid.UUID] = None visit_date: Optional[str] = None visit_method: Optional[str] = None time_range: Optional[str] = None visitor_name: Optional[str] = None visitor_phone: Optional[str] = None communication_content: Optional[str] = None customer_demand: Optional[str] = None companions: Optional[list[uuid.UUID]] = None photos: Optional[list[str]] = None class VisitOut(BaseModel): id: uuid.UUID customer_id: uuid.UUID visit_date: date visit_method: str time_range: str visitor_name: str = "" visitor_phone: str = "" communication_content: str customer_demand: str companions: Optional[list[uuid.UUID]] = None photos: Optional[list[str]] = None manager_id: uuid.UUID created_at: datetime updated_at: datetime # Joined fields customer_name: Optional[str] = None manager_name: Optional[str] = None model_config = {"from_attributes": True} class VisitListOut(BaseModel): id: uuid.UUID customer_id: uuid.UUID visit_date: date visit_method: str time_range: str manager_id: uuid.UUID customer_name: Optional[str] = None manager_name: Optional[str] = None has_photos: bool = False model_config = {"from_attributes": True}