import json import random from fastapi import APIRouter, Request, FastAPI from fastapi.templating import Jinja2Templates from app.controllers.category_controller import CategoryController class RouteToWeb: def __init__(self, app: FastAPI): """Initialize the controller.""" self.router = APIRouter() self.templates = Jinja2Templates(directory="templates") self.app = app self.category_controller = CategoryController() self._add_routes() self._add_global_middleware() def _add_routes(self): """Add routes to the router.""" @self.router.get("/route-list", tags=["system"]) async def route_list(request: Request): """Render route list with categories.""" routes = [ {"path": route.path, "name": route.name or "Unnamed"} for route in self.app.routes ] categories = request.state.categories return self.templates.TemplateResponse( "route_list.html", {"request": request, "routes": routes, "categories": categories, "page_title": "Route og Kategori Liste"}, ) def _add_global_middleware(self): """Middleware to add categories and next category globally to all requests.""" @self.app.middleware( "http" ) async def add_categories_to_request(request: Request, call_next): def generate_dynamic_description(category_name: str) -> str: """Generate a dynamic and engaging link text for a category.""" templates = [ "Dyk ned i kategorien {category} og bliv inspireret!", "Opdag alt, hvad du behøver at vide i kategorien {category}.", "Udforsk {category}-kategorien og find noget nyt og spændende.", "Lad dig fordybe i kategorien {category} – der er meget at se!", "Find din næste læseoplevelse i {category}-kategorien.", "Gå på opdagelse i kategorien {category} og bliv klogere.", "Der venter spændende indhold i {category}-kategorien – klik her!", "Vil du vide mere? Hele kategorien {category} er kun ét klik væk.", "Læs videre i kategorien {category} og få ny inspiration.", "Fordyb dig i {category}-kategorien og opdag nyt indhold.", "Spring ind i {category}-kategorien og gå på opdagelse!", "Find masser af viden og gode læseoplevelser i {category}-kategorien.", "Udforsk hele kategorien {category} og bliv beriget med ny viden.", "Der er mere at læse i {category}-kategorien – gå ikke glip af det!", "Tag et dybere kig i kategorien {category} og bliv inspireret!" ] template = random.choice( templates ) return template.format( category = category_name.lower() ) """Inject categories and next category into request.state globally.""" # Hent kategorier direkte fra CategoryController categories_response = await self.category_controller.list_categories( request ) categories_data = categories_response.body.decode() categories = json.loads( categories_data ) # Tilføj kategorier til request.state request.state.categories = categories # Find den aktuelle og næste kategori current_path = request.url.path.split("/")[-1] next_category = None print(current_path) for index, category in enumerate( categories ): print(category) if category["path"] == current_path: # Find næste kategori (cirkulær, hvis det er den sidste) next_index = (index + 1) % len( categories ) next_category = categories[next_index] next_category["description"] = generate_dynamic_description( next_category["path"] ) break # Tilføj næste kategori til request.state request.state.next_category = next_category response = await call_next( request ) return response