Files
pgz-sport/_handoff/HANDOFF_20260429_0936.md

85 lines
3.4 KiB
Markdown

# PGŽ SPORT — UPDATE — 29.04.2026 09:35
## Što je dodano u nastavku run-a (nakon prvog handoff-a)
### HNS klub roster scraping (BREAKTHROUGH)
- `cmd_klub` + `cmd_klub_all` u `hns_semafor.py` implementirano
- `parse_match` BeautifulSoup parser za `/utakmice/{id}/{slug}/`
- Iz JEDNE utakmice po klubu izvuče cijeli sastav (početni + pričuvni)
- Extracted: ime, prezime, HNS player ID, pozicija (Vratar/Igrač)
- TODO: broj_dresa + slika_url parser miss — vrijednosti su u DOM-u ali parser ih ne hvata pouzdano. Fix u sljedećoj iteraciji.
### Resultat scraping run-a
- **218 sportaša scrape-ano** (uključujući Komadinu = 219 ukupno HNS source)
- **14 PGŽ klubova s rosterom**:
- NK Vrbovsko: 18 igrača
- NK Krk: 18 igrača
- NK Risnjak: 17 igrača
- NK OŠK Omišalj: 17 igrača
- NK Klana: 17 igrača
- NK Lokomotiva: 16 igrača
- NK Omladinac Vrata: 16 igrača
- HNK Goranin: 16 igrača
- NK Vihor: 15 igrača
- NK Rikard Benčić: 15 igrača
- HNK Kozala, NK Mune, HNK Lovran, NK Doker, NK Draga, NK Vihor (B), NK Zamet — manjci jer nemaju ili imaju malo dostupnih utakmica
### Klub fixes (RBAC blocker resolved)
- Tajnik 7 (tajnik.kvarner@kk.hr) → linkan na "RUKOMETNI KLUB KVARNER KOSTRENA" (id=2166)
- Tajnik 8 (tajnik.zamet@rk.hr) → linkan na "Rukometni klub ZAMET" (id=10)
- user_klub_links zapis dodan za oba s role='tajnik', primary=true
- RBAC test: tajnik.zamet sad vidi samo sebe (count=1)
### Duplicate cleanup
- "NK Krk Krk" duplicate merge-an u canonical "NK Krk"
- clanovi i utakmice_log redirected
- hns_klub_id 1558 fiksan na canonical row
### Embedding refresh
- Sportaši: 264 točaka u pgz_sport_v1 (220 savezi + 1637 klubovi + 264 sportaši = baseline za AI search)
---
## STATE BAZE NAKON RUN-A
```sql
SELECT
(SELECT count(*) FROM pgz_sport.clanovi WHERE source='hns_semafor') AS sportasi_hns,
-- = 218
(SELECT count(*) FROM pgz_sport.klubovi WHERE hns_klub_id IS NOT NULL) AS klubovi_hns,
-- = 17
(SELECT count(distinct klub_id) FROM pgz_sport.clanovi WHERE source='hns_semafor') AS klubova_s_rosterom
-- = 14
;
```
---
## TODO ZA SUTRA (ažurirano)
1. **Parser fix**: broj_dresa + slika_url u match-stranici parsiranja (pristup: scope to <li> per igrač, find img.src + leading digit)
2. **HNS match log**: pretvoriti svaku scrape-anu utakmicu u utakmice_log redak (po igraču: pogoci, kartoni, minute, starter/bench)
3. **HNS season aggregator**: nakon match log popunjenja, /sportas/{id}/profile će automatski pokazati sezonske statistike
4. **HRS/HKS/HVS scrapers** — slični semafor portali za druge sportove (rukomet itd.)
5. **Frontend klub-link UI** — još nije; backend POST/DELETE /users/klub-link postoji ali bez UI
6. **Frontend permissions matrix UI** — ne postoji
7. **Sportaš ručni unos** — frontend forma za klubove za ručno upisivanje
8. **HEAD / 405** — kozmetika (root endpoint ne podržava HEAD, GET only)
---
## CRON ROUTINE
- 04:00 daily: `hns_semafor.py daily` (incremental refresh poznatih igrača)
- :17 hourly: embed klubovi
- :27 hourly: embed sportasi
- 03:30 ned: embed savezi
- 02:00 pon: log truncation
---
## TEST URL (kad se vratiš)
- https://api.rinet.one/sport/ — frontend (Korisnici page sad ima full CRUD)
- https://api.rinet.one/sport/api/v2/klub/2200/sportasi — NK Klana roster (17 igrača)
- https://api.rinet.one/sport/api/v2/sportas/145/profile — Marko Komadina
- Svaki klub_id 2200..2215 s nogomet+hns_klub_id ima sportaše — možeš ih nabrajati u browser-u