working prototype

This commit is contained in:
Aron Petau 2025-09-17 16:35:11 +02:00
parent 4f2723b767
commit 1a4abe978f
21 changed files with 706 additions and 145 deletions

60
main.py
View file

@ -1,12 +1,16 @@
# main.py
import os
import shutil
from fastapi import FastAPI, UploadFile, File, Request
from fastapi.responses import HTMLResponse
from fastapi import FastAPI, UploadFile, File, Request, Form
from fastapi.responses import HTMLResponse, RedirectResponse
from fastapi.templating import Jinja2Templates
from fastapi.staticfiles import StaticFiles
from cost_calculator import allowed_file, analyze_pdf, get_rate_black, get_rate_color, UPLOAD_FOLDER
from mailer import send_order_sync
from dotenv import load_dotenv
load_dotenv()
app = FastAPI()
templates = Jinja2Templates(directory="templates")
@ -32,8 +36,8 @@ async def cost_dashboard(request: Request):
{
"request": request,
"rate_black": get_rate_black(),
"rate_color": get_rate_color()
}
"rate_color": get_rate_color(),
},
)
@ -57,6 +61,50 @@ async def upload_file(request: Request, file: UploadFile = File(...)):
"request": request,
"result": result,
"rate_black": get_rate_black(),
"rate_color": get_rate_color()
"rate_color": get_rate_color(),
},
)
@app.post("/send-order")
def send_order_endpoint(
request: Request,
filename: str = Form(...),
comment: str = Form(""),
):
"""
Handles the 'Send Order' button. Sends PDF + analysis + user comment via Matrix.
"""
path = os.path.join(UPLOAD_FOLDER, filename)
if not os.path.exists(path):
return templates.TemplateResponse(
"cost-calculator.html",
{"request": request, "error": "File not found. Please upload again."},
)
analysis = analyze_pdf(path)
try:
send_order_sync(path, analysis, room_id="!YokZIMTVFEmSMRmmsb:localhost", comment=comment)
# Render same result.html but include a success banner
return templates.TemplateResponse(
"result.html",
{
"request": request,
"result": analysis,
"rate_black": get_rate_black(),
"rate_color": get_rate_color(),
"success": "✅ Your order has been sent!"
},
)
except Exception as e:
return templates.TemplateResponse(
"result.html",
{
"request": request,
"result": analysis,
"rate_black": get_rate_black(),
"rate_color": get_rate_color(),
"error": f"Failed to send order: {e}",
},
)