generated from hjess/PythonTemplateProject
90 lines
3.5 KiB
Python
90 lines
3.5 KiB
Python
|
|
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
|