# retoor 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)