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:
2026-05-05 09:01:25 +02:00
parent b95b2e8423
commit e7102c720d
4 changed files with 2139 additions and 0 deletions
+36
View File
@@ -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."""