Feature: 3 Community-Features — Foto-Challenge, Stamm-Gassis, Rassen-Chip (SW by-v700)
- Foto-Challenge der Woche: DB-Tabellen, routes/challenges.py (current/submit/vote/winners), Scheduler-Job jeden Montag 08:00, walks.js Challenge-Tab mit Banner, Galerie, Voting-Herz - Gassi-Zeiten-Pool: DB-Tabelle gassi_zeiten, routes/gassi_zeiten.py (CRUD + Umkreis), walks.js Stamm-Gassis-Tab mit Karten, Wochentag-Selector, Mitmachen→Chat - Rassen-Treffen-Chip: GET /api/friends/same-breed, dog-profile.js zeigt Chip wenn andere User gleiche Rasse haben, Klick → Forum mit Rassen-Suche vorausgefüllt
This commit is contained in:
parent
d6206d378e
commit
aa4849d947
10 changed files with 1322 additions and 22 deletions
|
|
@ -342,3 +342,56 @@ async def remove_friend(friend_user_id: int, user=Depends(get_current_user)):
|
|||
AND ((requester_id=? AND addressee_id=?) OR (requester_id=? AND addressee_id=?))
|
||||
""", (uid, friend_user_id, friend_user_id, uid))
|
||||
return {"ok": True}
|
||||
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# GET /api/friends/same-breed — andere User mit gleicher Rasse
|
||||
# ------------------------------------------------------------------
|
||||
@router.get("/same-breed")
|
||||
async def same_breed(user=Depends(get_current_user)):
|
||||
"""Findet andere User mit Hunden derselben Rasse. Gibt Anzahl + Forum-Suche zurück."""
|
||||
uid = user["id"]
|
||||
with db() as conn:
|
||||
# Rassen des eingeloggten Users
|
||||
my_dogs = conn.execute(
|
||||
"SELECT rasse FROM dogs WHERE user_id=? AND rasse IS NOT NULL AND rasse != ''",
|
||||
(uid,)
|
||||
).fetchall()
|
||||
|
||||
if not my_dogs:
|
||||
return {"count": 0, "rassen": [], "forum_query": None}
|
||||
|
||||
rassen = list({d["rasse"].strip() for d in my_dogs if d["rasse"]})
|
||||
|
||||
# Andere User (nicht ich) die eine dieser Rassen haben
|
||||
ph = ",".join("?" * len(rassen))
|
||||
count_row = conn.execute(f"""
|
||||
SELECT COUNT(DISTINCT d.user_id) AS cnt
|
||||
FROM dogs d
|
||||
WHERE d.user_id != ?
|
||||
AND d.rasse IN ({ph})
|
||||
""", (uid, *rassen)).fetchone()
|
||||
|
||||
count = count_row["cnt"] if count_row else 0
|
||||
|
||||
# Für jede Rasse: wie viele andere User
|
||||
rassen_detail = []
|
||||
for rasse in rassen:
|
||||
n = conn.execute(
|
||||
"SELECT COUNT(DISTINCT user_id) AS cnt FROM dogs "
|
||||
"WHERE user_id != ? AND rasse = ?",
|
||||
(uid, rasse)
|
||||
).fetchone()["cnt"]
|
||||
if n > 0:
|
||||
rassen_detail.append({"rasse": rasse, "count": n})
|
||||
|
||||
rassen_detail.sort(key=lambda x: -x["count"])
|
||||
|
||||
# Forum-Suche-Link für die häufigste Rasse
|
||||
forum_query = rassen_detail[0]["rasse"] if rassen_detail else None
|
||||
|
||||
return {
|
||||
"count": count,
|
||||
"rassen": rassen_detail,
|
||||
"forum_query": forum_query,
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue