Fix: Admin Züchter-Tab — Alle Züchter Liste + Antraege-Section (SW by-v921)

- GET /api/admin/breeders: neuer Endpunkt listet alle aktiven Züchter
  mit Zwingername, Rasse, Stadt, Würfe/Zuchthunde-Zähler, subscription_tier
- _renderZuechter: zwei Sektionen parallel geladen
  - "Offene Anträge" (wie vorher, aber mit Section-Header auch wenn leer)
  - "Alle Züchter": Tabelle analog Nutzer-Tab mit Abo-Button → _changeTier
- api.js: API.breeder.allList() hinzugefügt
- SW by-v921, APP_VER 921
This commit is contained in:
rene 2026-05-14 10:06:48 +02:00
parent f6b37717b4
commit 52160e4dc0
6 changed files with 113 additions and 10 deletions

View file

@ -183,6 +183,27 @@ async def admin_pending_breeders(admin=Depends(require_admin)):
return [dict(r) for r in rows]
# ------------------------------------------------------------------
# GET /api/admin/breeders — alle aktiven Züchter
# ------------------------------------------------------------------
@router.get("/admin/breeders")
async def admin_all_breeders(admin=Depends(require_admin)):
with db() as conn:
rows = conn.execute("""
SELECT u.id, u.name, u.email, u.created_at, u.subscription_tier,
u.breeder_status, u.last_login,
bp.zwingername, bp.rasse_text, bp.verein, bp.vdh_mitglied,
bp.stadt, bp.website, bp.verified_at,
(SELECT COUNT(*) FROM litters WHERE user_id=u.id) AS wuerfe_count,
(SELECT COUNT(*) FROM dogs WHERE user_id=u.id AND is_zucht_hund=1) AS zuchthunde_count
FROM users u
LEFT JOIN breeder_profiles bp ON bp.user_id = u.id
WHERE u.rolle = 'breeder' OR u.breeder_status = 'approved'
ORDER BY bp.verified_at DESC NULLS LAST, u.created_at DESC
""").fetchall()
return [dict(r) for r in rows]
# ------------------------------------------------------------------
# GET /api/admin/breeder/{user_id}/documents — Dokumente eines Antrags
# ------------------------------------------------------------------