Server-renderet af FastAPI selv (Jinja2 + vanilla JS/CSS, intet build-step) mod det eksisterende domæneopløste JSON-API fra 8b. GET / viser bestillingssiden når en runde er åben (rundeoverskrift, intro_text, kategori-grupperet vinkatalog med live-beregnet EUR/DKK-total, bestillingsformular), ellers en tilmeldingsside. GET /tilmelding er altid tilgængelig uafhængigt af rundestatus, og GET /afhentning viser rutens meeting_info. Layoutet er modelleret efter den gamle sides bestillingsside. get_current_round's serialiseringslogik er udtrukket til en delt _build_page_info-helper, så JSON-API'et og de nye HTML-sider genbruger nøjagtig samme domæne-/rundeopslag. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
36 lines
1.5 KiB
Python
36 lines
1.5 KiB
Python
from fastapi import APIRouter, Request
|
|
from fastapi.responses import HTMLResponse
|
|
from fastapi.templating import Jinja2Templates
|
|
|
|
from app.db import SessionDep
|
|
from app.routers.public_orders import _build_page_info, get_route_from_domain
|
|
|
|
router = APIRouter(tags=["public-site"])
|
|
templates = Jinja2Templates(directory="app/templates")
|
|
|
|
|
|
@router.get("/", response_class=HTMLResponse)
|
|
def public_home(request: Request, session: SessionDep) -> HTMLResponse:
|
|
route = get_route_from_domain(request, session)
|
|
page_info = _build_page_info(session, route)
|
|
if page_info.current_round is None:
|
|
return templates.TemplateResponse(
|
|
request, "signup.html", {"route_name": route.name, "no_round_open": True}
|
|
)
|
|
return templates.TemplateResponse(request, "order.html", {"route_name": route.name, "page": page_info})
|
|
|
|
|
|
@router.get("/tilmelding", response_class=HTMLResponse)
|
|
def public_signup_page(request: Request, session: SessionDep) -> HTMLResponse:
|
|
route = get_route_from_domain(request, session)
|
|
return templates.TemplateResponse(
|
|
request, "signup.html", {"route_name": route.name, "no_round_open": False}
|
|
)
|
|
|
|
|
|
@router.get("/afhentning", response_class=HTMLResponse)
|
|
def public_pickup_page(request: Request, session: SessionDep) -> HTMLResponse:
|
|
route = get_route_from_domain(request, session)
|
|
return templates.TemplateResponse(
|
|
request, "pickup.html", {"route_name": route.name, "meeting_info": route.meeting_info}
|
|
)
|