835e5d38fd
This reverts commit 03198557f7.
122 lines
2.5 KiB
Python
122 lines
2.5 KiB
Python
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
|
|
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
|
|
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
|
|
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
|
|
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
|