HNS endpoints: /clan/{id}/hns-career + /klubovi/pgz-financirani + /dashboard/hns-coverage
Backed by: pgz_sport.hns_player_seasons, hns_klub_roster, v_pgz_financirani_klubovi Used by: cc-hns subagents for UI integration
This commit is contained in:
@@ -1998,6 +1998,80 @@ except Exception as e:
|
||||
print(f'[DEBUG] router fail: {e}')
|
||||
|
||||
|
||||
@app.get("/api/v2/clan/{clan_id}/hns-career")
|
||||
def clan_hns_career(clan_id: int):
|
||||
"""HNS karijera za sportaša: sezone + utakmice."""
|
||||
seasons = fetch("""
|
||||
SELECT sezona, klub_naziv, natjecanje, nastupi, startna, zamjena, golovi, asistencije, zuti, crveni, minute
|
||||
FROM pgz_sport.hns_player_seasons
|
||||
WHERE clan_id = %s
|
||||
ORDER BY sezona DESC
|
||||
""", (clan_id,))
|
||||
matches = fetch("""
|
||||
SELECT datum, natjecanje, domacin, gost, rezultat, pozicija, startna, golovi, asistencije, zuti, crveni
|
||||
FROM pgz_sport.hns_player_matches
|
||||
WHERE clan_id = %s
|
||||
ORDER BY datum DESC NULLS LAST
|
||||
LIMIT 50
|
||||
""", (clan_id,))
|
||||
# Stats roll-up
|
||||
summary = fetch("""
|
||||
SELECT
|
||||
count(DISTINCT sezona) AS sezona_broj,
|
||||
sum(nastupi) AS ukupno_nastupi,
|
||||
sum(golovi) AS ukupno_golovi,
|
||||
sum(asistencije) AS ukupno_asistencije,
|
||||
sum(zuti) AS ukupno_zuti,
|
||||
sum(crveni) AS ukupno_crveni
|
||||
FROM pgz_sport.hns_player_seasons WHERE clan_id = %s
|
||||
""", (clan_id,))
|
||||
return {
|
||||
"clan_id": clan_id,
|
||||
"summary": summary[0] if summary else {},
|
||||
"seasons": seasons,
|
||||
"matches": matches,
|
||||
"total_seasons": len(seasons),
|
||||
"total_matches": len(matches),
|
||||
}
|
||||
|
||||
|
||||
@app.get("/api/v2/klubovi/pgz-financirani")
|
||||
def klubovi_pgz_financirani(sport: str = None, limit: int = 500):
|
||||
"""PGŽ financirani klubovi — koji su primili novce iz potpora."""
|
||||
where_extra = ""
|
||||
params = []
|
||||
if sport:
|
||||
where_extra = " WHERE sport = %s"
|
||||
params.append(sport)
|
||||
rows = fetch(f"""
|
||||
SELECT k.*,
|
||||
(SELECT count(*) FROM pgz_sport.clanovi WHERE klub_id = k.id) AS sportasa_count,
|
||||
(SELECT count(*) FROM pgz_sport.hns_klub_roster WHERE klub_id = k.id) AS hns_roster_count,
|
||||
(SELECT count(*) FROM pgz_sport.potpore_nositelji WHERE klub_id = k.id OR naziv_kluba ILIKE k.naziv) AS potpora_count,
|
||||
(SELECT sum(iznos) FROM pgz_sport.potpore_nositelji WHERE klub_id = k.id OR naziv_kluba ILIKE k.naziv) AS potpora_ukupno
|
||||
FROM pgz_sport.v_pgz_financirani_klubovi k
|
||||
{where_extra}
|
||||
ORDER BY potpora_ukupno DESC NULLS LAST
|
||||
LIMIT %s
|
||||
""", tuple(params) + (limit,))
|
||||
return {"count": len(rows), "rows": rows}
|
||||
|
||||
|
||||
@app.get("/api/v2/dashboard/hns-coverage")
|
||||
def dashboard_hns_coverage():
|
||||
"""HNS Coverage widget data."""
|
||||
stats = fetch("""
|
||||
SELECT
|
||||
(SELECT count(*) FROM pgz_sport.v_pgz_financirani_klubovi WHERE sport='nogomet' AND source_url LIKE %s) AS klubova_target,
|
||||
(SELECT count(DISTINCT klub_id) FROM pgz_sport.hns_klub_roster) AS klubova_scraped,
|
||||
(SELECT count(*) FROM pgz_sport.clanovi WHERE hns_igrac_id IS NOT NULL) AS sportasa_s_hns,
|
||||
(SELECT count(*) FROM pgz_sport.hns_klub_roster) AS roster_total,
|
||||
(SELECT count(*) FROM pgz_sport.hns_player_seasons) AS seasons_total,
|
||||
(SELECT max(scraped_at) FROM pgz_sport.hns_klub_roster) AS last_sync
|
||||
""", ('%semafor.hns.family/klubovi%',))
|
||||
return stats[0] if stats else {}
|
||||
|
||||
|
||||
@app.get("/")
|
||||
def root(request: Request):
|
||||
host = request.headers.get("host", "")
|
||||
|
||||
Reference in New Issue
Block a user