scheduler / app.py
Sahanabg's picture
Update app.py
e4193c8 verified
Raw History Blame Contribute Delete
2.85 kB
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)}"})