Trifecta-Lab / src /campaigns.py
Brettapps's picture
Upload folder using huggingface_hub (part 21)
e23172f verified
Raw History Blame Contribute Delete
1.68 kB
"""Campaign management module"""
from fastapi import APIRouter
from pydantic import BaseModel
from typing import List, Optional
from datetime import datetime
router = APIRouter(prefix="/campaigns")
class CampaignCreate(BaseModel):
name: str
industry: str
budget: float
channels: List[str] = ["email"]
start_date: Optional[str] = None
class CampaignResponse(BaseModel):
id: int
name: str
status: str
budget: float
leads_targeted: int
created_at: str
_campaigns_db = {}
_next_id = 1
@router.post("/", response_model=CampaignResponse)
async def create_campaign(campaign: CampaignCreate):
global _next_id
# Calculate estimated leads
leads_targeted = int(campaign.budget * 0.15)
_campaigns_db[_next_id] = {
"name": campaign.name,
"industry": campaign.industry,
"budget": campaign.budget,
"leads_targeted": leads_targeted,
"status": "running",
"created_at": datetime.utcnow().isoformat()
}
cid = _next_id
_next_id += 1
return CampaignResponse(
id=cid,
name=campaign.name,
status="running",
budget=campaign.budget,
leads_targeted=leads_targeted,
created_at=datetime.utcnow().isoformat()
)
@router.get("/", response_model=List[CampaignResponse])
async def list_campaigns():
return [
CampaignResponse(
id=cid,
name=data["name"],
status=data["status"],
budget=data["budget"],
leads_targeted=data["leads_targeted"],
created_at=data["created_at"]
)
for cid, data in _campaigns_db.items()
]