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=["*"], ) @app.post("/process-csv") 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"} @app.get("/get-leads") def fetch_leads(): return get_pending_leads() @app.post("/update-lead/{lead_id}") def update_lead(lead_id: int, status: str = "approved"): update_lead_status(lead_id, status) return {"status": "updated"} @app.get("/") def read_root(): return {"message": "Lead Qualifier API is running!"}