Sprint 14: Freunde-Seite mit Profildaten (Avatar, Wohnort, Bio, Erfahrungs-Badge)

- Backend: friends-API liefert jetzt bio, wohnort, erfahrung, social_link,
  profil_sichtbarkeit, avatar_url für friends/search/incoming
- Frontend: User-Cards (Suche + Freundesliste) zeigen Avatar-Foto (statt
  Buchstaben-Kreis wenn avatar_url vorhanden), Wohnort mit Pin-Icon,
  Bio-Vorschau (2 Zeilen, max 120 Zeichen, bei private ausgeblendet) und
  Erfahrungs-Badge neben dem Namen
- Profil-Modal erweitert um Wohnort, Erfahrung, vollständige Bio und Social-Link
This commit is contained in:
rene 2026-04-17 09:23:28 +02:00
parent 41c4ba3dd6
commit 692e6f9378
2 changed files with 116 additions and 23 deletions

View file

@ -30,6 +30,8 @@ async def list_friends(user=Depends(get_current_user)):
SELECT f.id, f.status, f.created_at,
CASE WHEN f.requester_id=? THEN f.addressee_id ELSE f.requester_id END AS friend_id,
u.name AS friend_name,
u.bio, u.wohnort, u.erfahrung, u.social_link,
u.profil_sichtbarkeit, u.avatar_url,
{dogs_sq} AS dogs_json
FROM friendships f
JOIN users u ON u.id = CASE WHEN f.requester_id=? THEN f.addressee_id ELSE f.requester_id END
@ -39,6 +41,7 @@ async def list_friends(user=Depends(get_current_user)):
incoming = conn.execute(f"""
SELECT f.id, f.created_at, u.name AS requester_name, u.id AS requester_id,
u.avatar_url,
{dogs_sq} AS dogs_json
FROM friendships f
JOIN users u ON u.id=f.requester_id
@ -87,6 +90,8 @@ async def search_users(q: str = "", user=Depends(get_current_user)):
with db() as conn:
rows = conn.execute("""
SELECT u.id, u.name,
u.bio, u.wohnort, u.erfahrung, u.social_link,
u.profil_sichtbarkeit, u.avatar_url,
(SELECT json_group_array(json_object('name', d.name, 'rasse', d.rasse))
FROM dogs d WHERE d.user_id=u.id AND d.is_public=1) AS dogs_json
FROM users u