58 lines
1.7 KiB
Python
58 lines
1.7 KiB
Python
import uuid
|
|
from datetime import datetime
|
|
from typing import Any, Optional
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
class ContactLeadCreate(BaseModel):
|
|
name: str = Field(min_length=1, max_length=255)
|
|
email: str
|
|
phone: Optional[str] = Field(default=None, max_length=50)
|
|
service: Optional[str] = Field(default=None, max_length=255)
|
|
services: list[str] = Field(default_factory=list)
|
|
petName: Optional[str] = Field(default=None, max_length=100)
|
|
petBreed: Optional[str] = Field(default=None, max_length=100)
|
|
location: Optional[str] = Field(default=None, max_length=100)
|
|
serviceAreaStatus: Optional[str] = Field(default=None, max_length=32)
|
|
message: Optional[str] = Field(default=None, max_length=5000)
|
|
source: str = Field(default="contact_form", max_length=50)
|
|
|
|
|
|
class ContactLeadResponse(BaseModel):
|
|
id: uuid.UUID
|
|
full_name: str
|
|
email: str
|
|
phone: Optional[str]
|
|
requested_services: Optional[str]
|
|
pet_name: Optional[str]
|
|
pet_breed: Optional[str]
|
|
suburb: Optional[str]
|
|
service_area_status: Optional[str]
|
|
message: Optional[str]
|
|
source: str
|
|
status: str
|
|
notes: Optional[str]
|
|
invited_at: Optional[datetime]
|
|
invited_member_id: Optional[uuid.UUID]
|
|
metadata_json: Optional[dict[str, Any]]
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
|
|
model_config = {"from_attributes": True}
|
|
|
|
|
|
class ContactLeadUpdate(BaseModel):
|
|
status: Optional[str] = Field(default=None, max_length=32)
|
|
notes: Optional[str] = Field(default=None, max_length=5000)
|
|
|
|
|
|
class ContactLeadInviteRequest(BaseModel):
|
|
send_email: bool = True
|
|
|
|
|
|
class ContactLeadInviteResponse(BaseModel):
|
|
lead: ContactLeadResponse
|
|
member_id: uuid.UUID
|
|
member_status: str
|