Wetter-Chip auf Karte + Bugfix private Routen zählen für km-Stats
- GET /api/weather?lat=&lon= (Open-Meteo, 30-min TTL-Cache) - Zecken-Warnung regelbasiert: März–Okt + Temp > 7°C - Karte: Wetterchip oben rechts nach GPS-Fix - stats.py + achievements.py: is_public-Filter entfernt — private Routen zählen jetzt für eigene km/Achievements - SW by-v320, APP_VER 308
This commit is contained in:
parent
43d33c0fd1
commit
0461f936ce
9 changed files with 185 additions and 13 deletions
|
|
@ -125,10 +125,10 @@ def update_streak(user_id: int, conn):
|
|||
def check_and_award(user_id: int, conn):
|
||||
stats = conn.execute("""
|
||||
SELECT ROUND(
|
||||
COALESCE((SELECT SUM(r.distanz_km) FROM routes r WHERE r.user_id=? AND r.is_public=1), 0) +
|
||||
COALESCE((SELECT SUM(r.distanz_km) FROM routes r WHERE r.user_id=? ), 0) +
|
||||
COALESCE((SELECT SUM(w.walked_km) FROM route_walks w WHERE w.user_id=?), 0),
|
||||
1) AS total_km,
|
||||
(SELECT COUNT(*) FROM routes r WHERE r.user_id=? AND r.is_public=1) AS routen,
|
||||
(SELECT COUNT(*) FROM routes r WHERE r.user_id=? ) AS routen,
|
||||
(SELECT COUNT(*) FROM user_map_pois p WHERE p.user_id=?) AS pois
|
||||
FROM (SELECT 1)
|
||||
""", (user_id, user_id, user_id, user_id)).fetchone()
|
||||
|
|
@ -178,17 +178,17 @@ async def my_achievements(user=Depends(get_current_user)):
|
|||
|
||||
stats = conn.execute("""
|
||||
SELECT ROUND(
|
||||
COALESCE((SELECT SUM(r.distanz_km) FROM routes r WHERE r.user_id=? AND r.is_public=1), 0) +
|
||||
COALESCE((SELECT SUM(r.distanz_km) FROM routes r WHERE r.user_id=? ), 0) +
|
||||
COALESCE((SELECT SUM(w.walked_km) FROM route_walks w WHERE w.user_id=?), 0),
|
||||
1) AS total_km,
|
||||
(SELECT COUNT(*) FROM routes r WHERE r.user_id=? AND r.is_public=1) AS routen,
|
||||
(SELECT COUNT(*) FROM routes r WHERE r.user_id=? ) AS routen,
|
||||
(SELECT COUNT(*) FROM user_map_pois p WHERE p.user_id=?) AS pois,
|
||||
ROUND(
|
||||
COALESCE((SELECT SUM(r.distanz_km) FROM routes r WHERE r.user_id=? AND r.is_public=1), 0) +
|
||||
COALESCE((SELECT SUM(r.distanz_km) FROM routes r WHERE r.user_id=? ), 0) +
|
||||
COALESCE((SELECT SUM(w.walked_km) FROM route_walks w WHERE w.user_id=?), 0),
|
||||
1)*1
|
||||
+ (SELECT COUNT(*) FROM user_map_pois p WHERE p.user_id=?)*5
|
||||
+ (SELECT COUNT(*) FROM routes r WHERE r.user_id=? AND r.is_public=1)*10 AS punkte
|
||||
+ (SELECT COUNT(*) FROM routes r WHERE r.user_id=? )*10 AS punkte
|
||||
FROM (SELECT 1)
|
||||
""", (uid, uid, uid, uid, uid, uid, uid, uid)).fetchone()
|
||||
|
||||
|
|
@ -208,8 +208,7 @@ async def my_achievements(user=Depends(get_current_user)):
|
|||
+COUNT(DISTINCT p.id)*5
|
||||
+COUNT(DISTINCT r.id)*10 AS punkte
|
||||
FROM users u
|
||||
LEFT JOIN routes r ON r.user_id=u.id AND r.is_public=1
|
||||
LEFT JOIN user_map_pois p ON p.user_id=u.id
|
||||
LEFT JOIN routes r ON r.user_id=u.id LEFT JOIN user_map_pois p ON p.user_id=u.id
|
||||
GROUP BY u.id
|
||||
) WHERE punkte > ?
|
||||
""", (stats["punkte"] if stats else 0,)).fetchone()
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ _STATS_SQL = """
|
|||
+ COUNT(DISTINCT p.id) * 5
|
||||
+ COUNT(DISTINCT r.id) * 10 AS punkte
|
||||
FROM users u
|
||||
LEFT JOIN routes r ON r.user_id = u.id AND r.is_public = 1
|
||||
LEFT JOIN routes r ON r.user_id = u.id
|
||||
LEFT JOIN user_map_pois p ON p.user_id = u.id
|
||||
GROUP BY u.id
|
||||
"""
|
||||
|
|
|
|||
20
backend/routes/weather.py
Normal file
20
backend/routes/weather.py
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
"""
|
||||
BAN YARO — Wetter-API
|
||||
GET /api/weather?lat=&lon= → aktuelles Wetter + Zecken-Warnung für Nutzerstandort
|
||||
"""
|
||||
|
||||
from fastapi import APIRouter, Query, HTTPException
|
||||
import weather as weather_module
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.get('')
|
||||
async def get_weather(
|
||||
lat: float = Query(..., ge=-90, le=90),
|
||||
lon: float = Query(..., ge=-180, le=180),
|
||||
):
|
||||
try:
|
||||
return await weather_module.get_weather_for_location(lat, lon)
|
||||
except Exception as exc:
|
||||
raise HTTPException(503, f'Wetter nicht verfügbar: {exc}')
|
||||
Loading…
Add table
Add a link
Reference in a new issue