Spaces:
Sleeping
Sleeping
| from fastapi import FastAPI, UploadFile, File | |
| from fastapi.middleware.cors import CORSMiddleware | |
| from dotenv import load_dotenv | |
| import pandas as pd | |
| import io | |
| import os | |
| from scraper import scrape_company | |
| from ai_engine import analyze_lead | |
| from database import save_lead, get_pending_leads, update_lead_status | |
| load_dotenv() | |
| app = FastAPI() | |
| app.add_middleware( | |
| CORSMiddleware, | |
| allow_origins=["*"], # Allow all origins for Vercel integration | |
| allow_credentials=False, | |
| allow_methods=["*"], | |
| allow_headers=["*"], | |
| ) | |
| async def process_csv(file: UploadFile = File(...)): | |
| contents = await file.read() | |
| df = pd.read_csv(io.BytesIO(contents)) | |
| for _, row in df.iterrows(): | |
| summary = scrape_company(row["url"]) | |
| result = analyze_lead(row["name"], row["company"], summary) | |
| save_lead({ | |
| "name": row["name"], | |
| "company": row["company"], | |
| "url": row["url"], | |
| "email": row.get("email", ""), | |
| "company_summary": summary, | |
| "score": result["score"], | |
| "score_reason": result["score_reason"], | |
| "cold_email": result["cold_email"] | |
| }) | |
| return {"status": "success"} | |
| def fetch_leads(): | |
| return get_pending_leads() | |
| def update_lead(lead_id: int, status: str = "approved"): | |
| update_lead_status(lead_id, status) | |
| return {"status": "updated"} | |
| def read_root(): | |
| return {"message": "Lead Qualifier API is running!"} | |