vinindkoeb/app/routers/public_site.py
carsten 609c3efb05 Opgave 8c: ny offentlig bestillings-/tilmeldingsside
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>
2026-09-28 22:55:55 +02:00

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}
)