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] = [] companion_names: list[str] = [] photos: list[str] = [] manager_id: Optional[uuid.UUID] = None # director/leader can specify 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 manager_id: Optional[uuid.UUID] = None companion_names: Optional[list[str]] = None photos: Optional[list[str]] = None manager_id: Optional[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 companion_names: list[str] = [] photos: Optional[list[str]] = None manager_id: uuid.UUID visit_group_id: Optional[str] = None 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}