from pydantic import BaseModel, Field from typing import Optional import uuid from datetime import date, datetime # ── User ── class UserCreate(BaseModel): name: str role: str = "manager" department: str = "" wecom_userid: Optional[str] = None class UserOut(BaseModel): id: uuid.UUID casdoor_id: str name: str role: str department: str wecom_userid: Optional[str] = None require_report: bool = True color: Optional[str] = None model_config = {"from_attributes": True} # ── CustomerContact ── class ContactCreate(BaseModel): name: str phone: str = "" role_desc: str = "" class ContactOut(BaseModel): id: uuid.UUID customer_id: uuid.UUID name: str phone: str role_desc: str model_config = {"from_attributes": True} # ── Customer ── class CustomerCreate(BaseModel): name: str customer_type: str = "unit" industry: str = "" address: str = "" in_use_services: str = "" monthly_fee: str = "" remarks: str = "" contacts: list[ContactCreate] = [] assignee_id: Optional[uuid.UUID] = None class CustomerUpdate(BaseModel): name: Optional[str] = None customer_type: Optional[str] = None industry: Optional[str] = None address: Optional[str] = None in_use_services: Optional[str] = None monthly_fee: Optional[str] = None remarks: Optional[str] = None assignee_id: Optional[uuid.UUID] = None class CustomerOut(BaseModel): id: uuid.UUID name: str customer_type: str = "unit" industry: str address: str in_use_services: str monthly_fee: str remarks: str = "" created_by: uuid.UUID created_at: datetime updated_at: datetime contacts: list[ContactOut] = [] primary_manager_name: Optional[str] = None model_config = {"from_attributes": True} class CustomerListOut(BaseModel): id: uuid.UUID name: str customer_type: str = "unit" industry: str in_use_services: str primary_manager_name: Optional[str] = None model_config = {"from_attributes": True} class CustomerListResponse(BaseModel): items: list[CustomerListOut] total: int page: int page_size: int # ── CustomerAssignment ── class AssignmentCreate(BaseModel): customer_id: uuid.UUID manager_id: uuid.UUID role: str = "primary" class AssignmentOut(BaseModel): id: uuid.UUID customer_id: uuid.UUID manager_id: uuid.UUID role: str assigned_at: datetime assigned_by: uuid.UUID model_config = {"from_attributes": True} class BatchAssignRequest(BaseModel): customer_ids: list[uuid.UUID] manager_id: uuid.UUID