Files
LifeFaq/app/controllers/route_to_web.py
Henrik Jess Nielsen c8ad950d98
All checks were successful
Build, Push, and Deploy to Nomad / docker-nomad (push) Successful in 42s
Middelware update and footer content
2024-12-20 22:39:00 +01:00

87 lines
3.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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
for index, category in enumerate( categories ):
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