Feature: Tierschutz-Check, KI-Züchter-Features, Export, SEO-Update
Tierschutz-System (immer aktiv, nicht abschaltbar): - welfare_check.py: regelbasierte Prüfung IK, Alter, Deckpause, Wurfanzahl, Genetik - Grün/Gelb/Rot-Modal bei Wurf anlegen + Probeverpaarung - Bei kritischem Befund + "Trotzdem fortfahren" → automatische Admin-Mail - Tierschutz-Check nie durch Nutzer deaktivierbar KI-Züchter-Features (pro User an/abschaltbar außer Tierschutz): - routes/zucht_ki.py: 5 Endpunkte — Wurfankündigung, Genetik-Erklärung, Paarungsanalyse, Hund-Beschreibung, Jahresbericht - Toggles in Einstellungen (ki_zucht_* Felder) - KI-Buttons in litters.js + zuchthunde.js KI-Routing: Privilegierte Rollen (Admin, Züchter, Moderator, Manager) nutzen Claude Sonnet primär, lokales LLM als Fallback Datenexport: routes/breeder_export.py — ZIP mit HTML-Dossier + ODS (odfpy hinzugefügt in requirements.txt) Admin-Profil: POST /admin/breeder/create-profile für Schnellprofil ohne Antragsprozess; Admin-Rolle bleibt erhalten Wurfformular: Dropdown aus Zuchtkartei für Vater/Mutter mit Auto-Fill; litters.vater_id + mutter_id als FK auf zucht_hunde Probeverpaarung: heart-fill Icon + Welfare-Block im Ergebnis Landing Page: Züchter-Section + Feature-Gruppe, Meta-Tags, JSON-LD, keywords, softwareVersion 2.1 SEO: llms.txt vollständig überarbeitet, robots.txt Züchter-Pfade, sitemap.xml um Wurfbörse + Züchter-Profile erweitert SW by-v474, APP_VER 451
This commit is contained in:
parent
91340be5a3
commit
c8ae514c01
20 changed files with 2129 additions and 200 deletions
|
|
@ -52,7 +52,7 @@ async def breeder_status(user=Depends(get_current_user)):
|
|||
if not row:
|
||||
raise HTTPException(404, "User nicht gefunden.")
|
||||
profile = None
|
||||
if row["rolle"] == "breeder":
|
||||
if row["rolle"] in ("breeder", "admin"):
|
||||
profile = conn.execute(
|
||||
"SELECT zwingername, rasse_text, verein, vdh_mitglied, stadt, website, beschreibung, verified_at "
|
||||
"FROM breeder_profiles WHERE user_id=?",
|
||||
|
|
@ -318,6 +318,28 @@ async def breeder_public_profile(zwingername: str):
|
|||
return dict(row)
|
||||
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# POST /api/admin/breeder/create-profile — Admin-Schnellprofil
|
||||
# ------------------------------------------------------------------
|
||||
@router.post("/admin/breeder/create-profile")
|
||||
async def admin_create_profile(admin=Depends(require_admin)):
|
||||
with db() as conn:
|
||||
existing = conn.execute(
|
||||
"SELECT id FROM breeder_profiles WHERE user_id=?", (admin["id"],)
|
||||
).fetchone()
|
||||
if existing:
|
||||
return {"message": "Profil existiert bereits.", "profile_id": existing["id"]}
|
||||
cur = conn.execute(
|
||||
"INSERT INTO breeder_profiles (user_id, zwingername, rasse_text, verein, stadt, verified_at) "
|
||||
"VALUES (?, ?, ?, ?, ?, datetime('now'))",
|
||||
(admin["id"], "Admin-Zwinger", "Alle Rassen", "Admin", "Überall")
|
||||
)
|
||||
conn.execute(
|
||||
"UPDATE users SET breeder_status='approved' WHERE id=?", (admin["id"],)
|
||||
)
|
||||
return {"message": "Admin-Züchterprofil angelegt.", "profile_id": cur.lastrowid}
|
||||
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# PUT /api/breeder/profile — eigenes Profil bearbeiten
|
||||
# ------------------------------------------------------------------
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue