Dashboard top-primatelji: psycopg2 LIKE escape fix (%% in CASE WHEN)
CASE WHEN ... ILIKE '%X%' patterns conflicted with %s param placeholder. Escaped to %%X%%. Endpoint now returns 200 with full klubovi list + inferred davatelj_naziv (RSS / Županijski / Grad Rijeka / fallback).
This commit is contained in:
@@ -296,6 +296,42 @@ def api_kpi():
|
||||
}
|
||||
|
||||
|
||||
@app.get("/api/dashboard/top-primatelji")
|
||||
def dashboard_top_primatelji(godina: int = 2025, limit: int = 50):
|
||||
"""Top primatelji javnih potreba — svi klubovi sa primljenim potporama u godini."""
|
||||
rows = fetch("""
|
||||
SELECT
|
||||
pn.naziv_kluba,
|
||||
pn.klub_id,
|
||||
pn.iznos,
|
||||
pn.napomena,
|
||||
pn.godina,
|
||||
COALESCE(k.sport, 'n/a') AS sport,
|
||||
COALESCE(s.naziv, '') AS savez_naziv,
|
||||
COALESCE(k.razina, '') AS razina,
|
||||
COALESCE(k.grad, '') AS grad,
|
||||
CASE
|
||||
WHEN pn.napomena ILIKE '%%županijski%%' OR pn.napomena ILIKE '%%PGZ%%' OR pn.napomena ILIKE '%%PGŽ%%' THEN 'Županijski sportski savez PGŽ'
|
||||
WHEN pn.napomena ILIKE '%%riječki%%' OR pn.napomena ILIKE '%%RSS%%' THEN 'Riječki sportski savez'
|
||||
WHEN pn.napomena ILIKE '%%grad rijeka%%' THEN 'Grad Rijeka'
|
||||
ELSE 'Riječki sportski savez'
|
||||
END AS davatelj_naziv
|
||||
FROM pgz_sport.potpore_nositelji pn
|
||||
LEFT JOIN pgz_sport.klubovi k ON k.id = pn.klub_id
|
||||
LEFT JOIN pgz_sport.savezi s ON s.id = k.savez_id
|
||||
WHERE pn.godina = %s
|
||||
ORDER BY pn.iznos DESC NULLS LAST
|
||||
LIMIT %s
|
||||
""", (godina, limit))
|
||||
|
||||
return {
|
||||
"godina": godina,
|
||||
"count": len(rows),
|
||||
"rows": rows,
|
||||
"ukupno": sum((r.get("iznos") or 0) for r in rows),
|
||||
}
|
||||
|
||||
|
||||
@app.get("/api/dashboard/ekosustav")
|
||||
def dashboard_ekosustav():
|
||||
"""Sport ekosustav PGŽ — coverage stats za enrichment iz FINA registra."""
|
||||
|
||||
Reference in New Issue
Block a user