Spaces:
Sleeping
Sleeping
| """ | |
| 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 | |