V8 MEGA: meta endpoints + manifestacije + HNS V8 harvester batch
Endpoints: - /v2/potpore/meta — dropdown options (sportovi, vrste, davatelji, godine) - /v2/potpore/by-year — sport, vrsta filters - /v2/manifestacije/meta — mjesta, razine, organizatori - /v2/manifestacije — lista s filterima HNS: - 20 PGŽ priority klubova batch harvester pokrenut (HNK Goranin, HNK Orijent 1919, HNK Rijeka, NK Crikvenica, ...) - ETA 30 min
This commit is contained in:
+66
-1
@@ -4959,8 +4959,24 @@ def proracun_sport(godina: int = None):
|
||||
# ═══════════════════════════════════════════════════════
|
||||
# POTPORE — by year filter
|
||||
# ═══════════════════════════════════════════════════════
|
||||
|
||||
|
||||
@router.get("/potpore/meta")
|
||||
def potpore_meta():
|
||||
"""Dropdown options za Financije sekciju."""
|
||||
sportovi = db_query("SELECT DISTINCT sport FROM pgz_sport.sufinanciranje_sport WHERE sport IS NOT NULL ORDER BY sport")
|
||||
vrste = db_query("SELECT DISTINCT vrsta FROM pgz_sport.sufinanciranje_sport WHERE vrsta IS NOT NULL ORDER BY vrsta")
|
||||
davatelji = db_query("SELECT DISTINCT izvor, count(*) AS broj FROM pgz_sport.sufinanciranje_sport WHERE izvor IS NOT NULL GROUP BY izvor ORDER BY broj DESC")
|
||||
godine = db_query("SELECT DISTINCT godina, count(*) AS broj, sum(iznos_eur)::numeric(12,2) AS suma FROM pgz_sport.sufinanciranje_sport GROUP BY godina ORDER BY godina DESC")
|
||||
return {
|
||||
"sportovi": [r["sport"] for r in sportovi],
|
||||
"vrste": [r["vrsta"] for r in vrste],
|
||||
"davatelji": [r["izvor"] for r in davatelji],
|
||||
"godine": godine,
|
||||
}
|
||||
|
||||
@router.get("/potpore/by-year")
|
||||
def potpore_by_year(godina: int = None, q: str = "", samo_klubovi: bool = True, davatelj: str = None):
|
||||
def potpore_by_year(godina: int = None, q: str = "", samo_klubovi: bool = True, davatelj: str = None, sport: str = None, vrsta: str = None):
|
||||
"""Sufinanciranje za specifičnu godinu — samo_klubovi=True izbacuje programe/totals/services."""
|
||||
import datetime
|
||||
yr = godina or datetime.date.today().year
|
||||
@@ -4972,6 +4988,12 @@ def potpore_by_year(godina: int = None, q: str = "", samo_klubovi: bool = True,
|
||||
if samo_klubovi:
|
||||
where.append("(je_klub IS NULL OR je_klub = true)")
|
||||
|
||||
if sport:
|
||||
where.append("LOWER(sport) = LOWER(%s)")
|
||||
params.append(sport)
|
||||
if vrsta:
|
||||
where.append("LOWER(vrsta) = LOWER(%s)")
|
||||
params.append(vrsta)
|
||||
if davatelj == 'rijeka':
|
||||
where.append("izvor ILIKE '%%rijeka.hr%%'")
|
||||
elif davatelj == 'pgz':
|
||||
@@ -5952,3 +5974,46 @@ def v2_clan_hns_profile(clan_id: int):
|
||||
"hns_url": hns_url,
|
||||
}
|
||||
|
||||
|
||||
@router.get("/manifestacije/meta")
|
||||
def manifestacije_meta():
|
||||
"""Dropdown options za manifestacije."""
|
||||
mjesta = db_query("SELECT DISTINCT mjesto, count(*) AS broj FROM pgz_sport.manifestacije WHERE mjesto IS NOT NULL GROUP BY mjesto ORDER BY broj DESC LIMIT 100")
|
||||
razine = db_query("SELECT DISTINCT razina FROM pgz_sport.manifestacije WHERE razina IS NOT NULL ORDER BY razina")
|
||||
organizatori = db_query("SELECT DISTINCT organizator, count(*) AS broj FROM pgz_sport.manifestacije WHERE organizator IS NOT NULL GROUP BY organizator ORDER BY broj DESC LIMIT 50")
|
||||
return {
|
||||
"mjesta": [r["mjesto"] for r in mjesta],
|
||||
"razine": [r["razina"] for r in razine],
|
||||
"organizatori": [r["organizator"] for r in organizatori],
|
||||
}
|
||||
|
||||
@router.get("/manifestacije")
|
||||
def manifestacije_list(mjesto: str = None, razina: str = None, organizator: str = None, q: str = None, limit: int = 200):
|
||||
"""Lista manifestacija s filterima."""
|
||||
where = ["aktivna = true"]
|
||||
params = []
|
||||
if mjesto:
|
||||
where.append("mjesto = %s")
|
||||
params.append(mjesto)
|
||||
if razina:
|
||||
where.append("razina = %s")
|
||||
params.append(razina)
|
||||
if organizator:
|
||||
where.append("organizator ILIKE %s")
|
||||
params.append(f"%{organizator}%")
|
||||
if q:
|
||||
where.append("(naziv ILIKE %s OR napomena ILIKE %s)")
|
||||
params.extend([f"%{q}%", f"%{q}%"])
|
||||
|
||||
rows = db_query(f"""
|
||||
SELECT m.id, m.naziv, m.mjesto, m.organizator, m.razina, m.broj_ucesnika,
|
||||
m.godina_od, m.spol_kategorija, m.napomena, m.source_url,
|
||||
s.naziv AS savez_naziv, s.id AS savez_id
|
||||
FROM pgz_sport.manifestacije m
|
||||
LEFT JOIN pgz_sport.savezi s ON s.id = m.savez_id
|
||||
WHERE {' AND '.join(where)}
|
||||
ORDER BY m.naziv
|
||||
LIMIT %s
|
||||
""", params + [limit])
|
||||
return {"count": len(rows), "rows": rows}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user