Spaces:
Sleeping
Sleeping
File size: 1,996 Bytes
48a3682 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | """
Pydantic models for request/response validation.
"""
from pydantic import BaseModel
from typing import Optional
from enum import Enum
class LeadStatus(str, Enum):
new = "new"
contacted = "contacted"
replied = "replied"
closed = "closed"
class ScrapeRequest(BaseModel):
query: str # e.g. "gym in Mumbai"
limit: int = 50
lat: Optional[float] = None
lng: Optional[float] = None
zoom: int = 14
class ScrapeStatusResponse(BaseModel):
status: str # "idle", "running", "completed", "failed"
total_found: int = 0
message: str = ""
class LeadCreate(BaseModel):
name: str
phone: Optional[str] = None
address: Optional[str] = None
website: Optional[str] = None
email: Optional[str] = None
instagram: Optional[str] = None
linkedin: Optional[str] = None
status: LeadStatus = LeadStatus.new
notes: Optional[str] = ""
class LeadUpdate(BaseModel):
name: Optional[str] = None
phone: Optional[str] = None
address: Optional[str] = None
website: Optional[str] = None
email: Optional[str] = None
instagram: Optional[str] = None
linkedin: Optional[str] = None
status: Optional[LeadStatus] = None
notes: Optional[str] = None
follow_up_date: Optional[str] = None
class LeadResponse(BaseModel):
id: int
name: str
phone: Optional[str]
address: Optional[str]
website: Optional[str]
email: Optional[str]
instagram: Optional[str]
linkedin: Optional[str]
status: str
notes: Optional[str]
follow_up_date: Optional[str]
created_at: str
class TemplateCreate(BaseModel):
name: str
content: str
class TemplateUpdate(BaseModel):
name: Optional[str] = None
content: Optional[str] = None
class TemplateResponse(BaseModel):
id: int
name: str
content: str
created_at: str
class DashboardStats(BaseModel):
total: int = 0
new: int = 0
contacted: int = 0
replied: int = 0
closed: int = 0
|