scheduler / app.py
Sahanabg's picture
Update app.py
e4193c8 verified
from fastapi import FastAPI, Request
from fastapi.responses import HTMLResponse, JSONResponse, FileResponse
from fastapi.templating import Jinja2Templates
import requests
import logging
import os
# ------------------------------
# Setup basic logging
# ------------------------------
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s - %(levelname)s - %(message)s"
)
logger = logging.getLogger(__name__)
app = FastAPI()
templates = Jinja2Templates(directory=".")
SECURE_API_KEY = os.getenv("SECURE_API_KEY")
BASE_API_URL = "https://script.google.com/macros/s/AKfycbwuRcqUlVroX4qGzBKNpC9mVa6ftGlNL2adJmVBxNW5-VFhj67WRTbFYh-QYXxobCC5ew/exec"
@app.get("/style.css")
async def get_style():
return FileResponse("style.css", media_type="text/css")
@app.get("/", response_class=HTMLResponse)
async def index(request: Request, ln: str = "", le: str = "", oe: str = ""):
"""
Pass query parameters to the front-end to pre-fill the form.
ln = lead name
le = lead email
oe = owner / sales rep email
"""
return templates.TemplateResponse(
"index.html",
{
"request": request,
"lead_name": ln,
"lead_email": le,
"sales_rep_email": oe
}
)
@app.get("/available")
async def available(name: str, email: str, salesRepEmail: str):
"""
Return available slots for a given salesRepEmail
"""
try:
slot_resp = requests.get(f"{BASE_API_URL}?action=getAvailableSlots&salesRepEmail={salesRepEmail}")
slots = slot_resp.json()
if isinstance(slots, dict) and "error" in slots:
return {"error": slots["error"]}
if not slots:
return {"slots": [], "repEmail": salesRepEmail}
return {"slots": slots, "repEmail": salesRepEmail}
except Exception as e:
logger.exception("Error fetching slots")
return {"error": str(e)}
@app.post("/book")
async def book_meeting(booking: dict):
name = booking.get("name")
email = booking.get("email")
salesRepEmail = booking.get("salesRepEmail")
selectedSlot = booking.get("selectedSlot")
try:
response = requests.get(
f"{BASE_API_URL}?action=createBooking&customerName={name}&customerEmail={email}"
f"&salesRepEmail={salesRepEmail}&selectedSlot={selectedSlot}"
)
response_data = response.json() if response.content else {}
if "error" in response_data:
return JSONResponse(status_code=400, content={"message": response_data["error"]})
return JSONResponse(status_code=200, content={"message": "Booking confirmed!", "data": response_data})
except Exception as e:
logger.exception("Error while creating booking")
return JSONResponse(status_code=500, content={"message": f"Failed to create booking. {str(e)}"})