PGŽ Sport Platform — Round 1+2 baseline (sport2.html + API)

This commit is contained in:
Damir Radulić
2026-05-04 23:39:08 +02:00
commit a7ec0a86be
1820 changed files with 694455 additions and 0 deletions
@@ -0,0 +1,99 @@
# HANDOFF — 29.04.2026 ~20:00 (sprint dok je Damir radio)
## ✅ DONE u ovom sprintu
### A) Tri API 500 GREŠKE → SVE POPRAVLJENE
1. **Audit endpoint `/api/v2/admin/audit?limit=100`** → 500 zbog `column a.created_at does not exist`
→ FIX: `/opt/pgz-sport/pgz_sport_v2_router.py` linija 383: `a.ts AS created_at, a.meta AS payload, a.resource_type, a.resource_id, a.ip_address`
→ Backup: `pgz_sport_v2_router.py.bak.{ts}`
→ Sad vraća 401 (auth required) ne 500
2. **Manifestacije `/api/manifestacije`** → 500 zbog `column reference "naziv" is ambiguous` (m.naziv vs s.naziv)
→ FIX: `/opt/pgz-sport/pgz_sport_api.py` `sort_col` mapping → `m.naziv`, `m.razina`, `m.godina_od`, `m.mjesto`
→ Sad 200 OK + 113 manifestacija
3. **Full-profile `/api/v2/clanovi/{id}/full-profile`** → 500 zbog `%` u SQL koji je psycopg2 čitao kao parametar
→ FIX: `% 100``%% 100` u LPAD CASE expressionu
### B) GitHub PAT NOVI snimljen
- `/opt/secrets/github_pat` (chmod 600)
- `/opt/.env.rinet` `GITHUB_PAT=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`
### C) HNS Semafor scraper - REAKTIVIRAN (stari dobri)
- `/opt/pgz-sport/scrapers/hns_semafor.py` (BeautifulSoup, 598 linija) - daleko bolji od mog v2
- SEED: 21 PGŽ klubova mapirani sa hns_klub_id
- KLUB_ALL: pucanje na 22 PGŽ klubova u background → trenutno **408 sportaša + 5,017 utakmica + 4 natjecanja**
- Stanje po klubovima:
- NK Zamet 37, NK Rikard Benčić 36, NK OŠK Omišalj 32, NK Vihor 30, NK Klana 30
- HNK Lovran 30, NK Vrbovsko 30, NK Lokomotiva 30, NK Mune 29, NK Krk 29
- HNK Goranin 26, NK Risnjak 26, NK Omladinac Vrata 22, NK Draga 22
- Log: `/opt/pgz-sport/_logs/hns_klub_all.log`
### D) NOVI ENDPOINTI (HNS Semafor stil profil)
- `GET /api/v2/clanovi/{cid}/full-profile` - kompletni HNS Semafor stil profil:
- sportaš osnovni podaci + slika + dres + pozicija
- trenutna sezona stats (4 KPI)
- sezone agregirane (sezona + natjecanje × N P Ž C)
- karijera (klubovi kroz vrijeme)
- utakmice (zadnjih 50)
- totals
- `GET /api/v2/klubovi/{kid}/clanovi` - HNS Semafor stil pregled članstva kluba
- `GET /api/v2/klubovi/sa-clanstvom` - svi klubovi sa brojem članova + HNS izvor
### E) GUI UPGRADE
- `pageSportas()` koristi novi `/full-profile` endpoint (kompatibilnost s starom strukturom)
- `pageKlubRoster()` dobio HNS Semafor link badge ↗ + "+ Sportaš" gumb za klub_admin
- `addSportasPrompt(klub_id)` funkcija za brzi dodavanje sportaša
### F) MULTI-TENANT users mapping POPRAVLJEN
| ID | Email | Type | Klub/Savez |
|----|-------|------|------------|
| 1 | damir@rinet.one | super_admin | - (sve) |
| 2 | pgz.lukanovic@pgz.hr | pgz_admin | - (PGŽ scope) |
| 3 | pgz.djelatnik@pgz.hr | pgz_user | - |
| 4 | pgz.finance@pgz.hr | pgz_finance | - |
| 5 | zzjz.medical@zzjzpgz.hr | pgz_zzjz | - |
| 6 | tajnik.hnk@rijeka.hr | savez_admin | savez=Nogometni savez PGŽ (10) |
| 7 | tajnik.kvarner@kk.hr | klub_admin | klub=KK Kvarner - Rijeka (2285) |
| 8 | tajnik.zamet@rk.hr | klub_admin | klub=RK ZAMET (2321) |
| 9 | sportas.test@example.hr | klub_clan | - |
### G) DOKUMENTI + EMBEDDING
- 253 dokumenti (povijesni o klubovima ranije ingestani: HŠK Victoria 1908, Stadion Kantrida, RK Zamet, Atletska dvorana Sušanj, BK Rijeka, Cvijet Mediterana, Klub Ocean ronjenje, Najbolji PGŽ 2025, NK Opatija 1911, HNK Orijent 1919)
- 1.721 chunks embeddani u Qdrant `pgz_sport_dokumenti_v1`
### H) AI SMOKE TEST PROŠAO
| Pitanje | Mod | Odgovor |
|---------|-----|---------|
| Tko je Ahmad Sharbini? | SQL | nogometaš član HNK Rijeka 2006 ✓ |
| Tko je Mirza Džomba? | SQL | rukometaš RK Zamet ✓ |
| Tko je Luciano Sušanj? | SQL | hrvatski atletičar AK Kvarner Autotrans, I HOO ✓ |
| Što je Stadion Kantrida? | RAG | povijesni stadion 1913, dom HNK Rijeke ✓ |
| Tko je Petar Klovar? | SQL | hrvatski ronilac Klub Ocean Rijeka ✓ |
| Što je RK Zamet? | SQL | rukometni klub Rijeka 1954/1957, Premijer liga ✓ |
## 📊 STATE u 20:00
```
klubovi total: 1.996
sportasi total: 2.145 (od kojih 408 iz HNS Semafor auto-sync)
utakmice_log: 5.017
dokumenti: 253
chunks embedded: 1.721 (Qdrant)
HNS klubovi: 22 (od 22 seedanih)
```
## 🔄 PENDING (za sljedeći sprint)
1. **Auto-povlačenje s drugih saveza**: HKS (košarka), HVS (vaterpolo), HRS (rukomet), HBS (biciklizam) - nemaju Semafor ekvivalent ali svaki ima neku DB
2. **GUI puna konsolidacija app.rinet.one stil** - postoje već cards/grids ali treba ujednačiti SVE: ikone (lucide), boje, padinge
3. **Pregled sportaša s vremenom**: stari sportaši koji više nisu u klubu
4. **Ostale GUI sekcije**: Manifestacije, Sport Stats, ZZJZ - imaju sve podatke ali GUI prikaz minimalniji
5. **Search ujedinjeni**: jedna search bar za klubove + sportaše + manifestacije
6. **Sportaš edit**: full edit form za klub_admin (trenutno samo brzi prompt)
## Operativni quick-ref
- **Bridge**: `curl -X POST https://api.rinet.one/bridge/exec -H "X-API-KEY: rinet-yS4ZnKlwUqsjk" -d '{"cmd":"..."}'`
- **DB**: `host=localhost dbname=rinet_v3 user=rinet password=R1net2026!SecureDB#v7`
- **HNS scraper modes**: `python3 /opt/pgz-sport/scrapers/hns_semafor.py [seed|player <pid>|klub <db_kid>|klub_all|daily]`
- **GUI**: https://api.rinet.one/sport/
- **Service**: `systemctl restart pgz-sport.service` port 8095
- **BGE-M3**: localhost:9879 (CUDA, dim=1024)
- **Qdrant**: 10.10.0.2:6333 collection `pgz_sport_dokumenti_v1`
- **GitHub PAT**: `cat /opt/secrets/github_pat`