Session 2026-04-21: SEO, Wiki-Anreicherung, Training, Lober
SEO & Crawler:
- robots.txt, llms.txt, sitemap.xml (508 Seiten bei Google)
- SSR-Seiten: /info, /wiki/rassen, /wiki/rasse/{slug}, /knigge
- Open Graph, JSON-LD, Breadcrumbs in index.html
Navigation:
- Training unter "Mein Hund", Wissen collapsible
- Welcome-Seite und Landing-Page auf 5-Gruppen-Struktur
Wiki:
- KI-Anreicherung (Claude API): beschreibung, vorkommen_de, Steckbrief
- "So einen hab ich" / Züchter-Verzeichnis
- Scheduler: 50 Rassen beim Start, 20/Nacht
Training:
- Session-Logging (Erfolgsquote, Stimmung, Zufriedenheit)
- Virtueller KI-Trainer (6h-Cache)
- Trainingskalender (Habit-Tracker)
- Top-Training → automatischer Tagebucheintrag
- Gamification ohne Druck: Badges, Streak, Stats
Fortschritts-Lober:
- Jeden Montag 09:00: Claude schreibt Lob-Text pro Hund
- Push + Karte im Tagebuch
Monitoring:
- 4× täglich Status-Mail mit Scheduler-Status + Wiki-Fortschritt
This commit is contained in:
parent
65d1cf6c7f
commit
180de32e57
22 changed files with 4351 additions and 189 deletions
35
backend/routes/praise.py
Normal file
35
backend/routes/praise.py
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
"""BAN YARO — Fortschritts-Lober"""
|
||||
from fastapi import APIRouter, Depends, Query
|
||||
from auth import get_current_user
|
||||
from database import db
|
||||
from datetime import date
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
def _current_week_key():
|
||||
d = date.today()
|
||||
return f"{d.isocalendar()[0]}-W{d.isocalendar()[1]:02d}"
|
||||
|
||||
@router.get("/current")
|
||||
async def get_current_praise(dog_id: int = Query(...), user=Depends(get_current_user)):
|
||||
"""Gibt den Lob-Text der aktuellen Woche zurück."""
|
||||
week_key = _current_week_key()
|
||||
with db() as conn:
|
||||
# Sicherheitscheck: Hund gehört dem User?
|
||||
dog = conn.execute(
|
||||
"""SELECT d.id, d.name FROM dogs d
|
||||
LEFT JOIN dog_shares ds ON ds.dog_id=d.id AND ds.shared_with_id=?
|
||||
WHERE d.id=? AND (d.user_id=? OR ds.id IS NOT NULL)""",
|
||||
(user["id"], dog_id, user["id"])
|
||||
).fetchone()
|
||||
if not dog:
|
||||
return {"praise": None}
|
||||
|
||||
row = conn.execute(
|
||||
"SELECT praise_text, generated_at FROM weekly_praise WHERE dog_id=? AND week_key=?",
|
||||
(dog_id, week_key)
|
||||
).fetchone()
|
||||
|
||||
if not row:
|
||||
return {"praise": None, "week_key": week_key}
|
||||
return {"praise": row["praise_text"], "week_key": week_key, "generated_at": row["generated_at"]}
|
||||
Loading…
Add table
Add a link
Reference in a new issue