Files
ad/molodetz/routers/mensen.py
T

43 lines
1.7 KiB
Python
Raw Normal View History

2026-10-05 09:36:20 +02:00
# retoor <retoor@molodetz.nl>
from fastapi import APIRouter, Request
from molodetz.database import get_user_by_username, post_counts_by_author, public_people, published_posts
from molodetz.responses import respond
from molodetz.schemas.people import PeopleOut, ProfileOut
from molodetz.seo import base_seo_context, profile_schema
from molodetz.seo_meta_text import description_for
from molodetz.utils.auth import not_found
router = APIRouter()
def _with_counts(people):
counts = post_counts_by_author([person["uid"] for person in people])
return [{**person, "post_count": counts.get(person["uid"], 0)} for person in people]
@router.get("")
async def people(request: Request):
persons = _with_counts(public_people())
seo = base_seo_context(request, "Mensen", description_for("mensen"), breadcrumbs=[("Molodetz", "/"), ("Mensen", "/mensen")])
return respond(request, "mensen.html", {"people": persons, "seo": seo}, model=PeopleOut)
@router.get("/{username}")
async def person(request: Request, username: str):
row = get_user_by_username(username)
if row is None:
not_found("Persoon niet gevonden")
person_row = _with_counts([row])[0]
own, _ = published_posts(limit=50, user_uid=row["uid"])
seo = base_seo_context(
request,
row["username"],
row.get("bio") or description_for("mensen"),
og_type="profile",
robots="index,follow" if person_row["post_count"] > 0 else "noindex,follow",
breadcrumbs=[("Molodetz", "/"), ("Mensen", "/mensen"), (row["username"], f"/mensen/{row['username']}")],
schemas=[profile_schema(request, row)],
)
return respond(request, "person.html", {"person": person_row, "posts": own, "seo": seo}, model=ProfileOut)