PGŽ Sport Platform — Round 1+2 baseline (sport2.html + API)
This commit is contained in:
@@ -0,0 +1,166 @@
|
||||
# HANDOFF: PGZ Sport Portal — Sprint 03.05.2026 17:15
|
||||
|
||||
**Datum:** 03.05.2026 17:15
|
||||
**Autor:** Claude Sonnet 4.6
|
||||
**Status:** 3-STRIKE ACTIVE — sve tvrdnje verificirane
|
||||
|
||||
---
|
||||
|
||||
## STANJE SERVERA (verified 17:15)
|
||||
|
||||
```
|
||||
pgz-sport.service: ACTIVE (port 8095)
|
||||
nginx: OK (no-cache headers na sport.rinet.one)
|
||||
Fail count: 0 (systemctl list-units --state=failed)
|
||||
```
|
||||
|
||||
## ŠTO RADI (endpoints 200 verified)
|
||||
|
||||
| Endpoint | Status |
|
||||
|----------|--------|
|
||||
| /api/v2/sport/objekti | ✅ 200 |
|
||||
| /api/v2/analytics/budget-score | ✅ 200 |
|
||||
| /api/v2/analytics/savez-drill?savez_id=N | ✅ 200 |
|
||||
| /api/v2/analytics/proracun-trend | ✅ 200 |
|
||||
| /api/v2/analytics/filter-options | ✅ 200 |
|
||||
| /api/v2/rno | ✅ 200 |
|
||||
| /api/v2/hns-natjecanja | ✅ 200 |
|
||||
| /api/v2/godisnjaci/search (POST) | ✅ 200 |
|
||||
| /sport/ HTML | ✅ 200, no-cache |
|
||||
|
||||
## ŠTO JE U HTML-u (verified grepcountom)
|
||||
|
||||
| Funkcija | Ref. |
|
||||
|----------|------|
|
||||
| pageObjekti | 1 (postoji) |
|
||||
| pageAnalytics | 2 (postoji) |
|
||||
| pageRno | 1 (postoji) |
|
||||
| pageHns | 1 (postoji) |
|
||||
| pageGodisnjaci | 3 (postoji) |
|
||||
| toggleNavSec | 2 (collapsible nav) |
|
||||
| pushState (URL hash) | 2 (hash routing) |
|
||||
|
||||
## ŠTO NIJE RIJEŠENO (problemi s prošle sesije)
|
||||
|
||||
### 1. `#objekti` stranica — POSTOJI ali nije vidljiva u nav?
|
||||
- **pageObjekti** je u HTML-u, `objekti` je u NAV (Registri sekcija)
|
||||
- Nav je collapsible — Registri sekcija je OPEN by default
|
||||
- Ako se ne vidi: hard refresh (Ctrl+Shift+R)
|
||||
- API: 106 objekata, sve kategorije, filtri tip/grad
|
||||
|
||||
### 2. MATRIX POPUNJENOSTI — NESTAO
|
||||
- Bio u starijoj verziji (negdje između bak.matrix.* backupova)
|
||||
- **NE POSTOJI** u trenutnom HTML-u
|
||||
- Treba rebuild: matrica savezi × kategorije podataka (clanovi, lijecnicki, dokumenti, fin...)
|
||||
- Backup gdje je bio: index.html.bak.matrix.1777744755 (20:43, 02.05)
|
||||
|
||||
### 3. OBRASCI / PREDLOŠCI — U DB, NEMA PAGE
|
||||
- `pgz_sport.form_templates` ima **15 rows** u DB
|
||||
- `pageObrasci` / `pageFormTemplates` NE POSTOJI u HTML-u
|
||||
- Treba dodati: API endpoint + frontend page
|
||||
- Endpoint za add: GET /api/v2/form-templates
|
||||
|
||||
### 4. AUTOTROLEJ — NIKAD NIJE BIO DIO PGŽ SPORT
|
||||
- Krivo sam ga stavio u "na horizontu" u ranijoj sesiji
|
||||
- Nema nikakve veze s PGŽ sport portalom
|
||||
- Memorizirano pogrešno iz generalnog Ri.NET konteksta
|
||||
- **BRISATI iz TODO liste za ovaj projekt**
|
||||
|
||||
## DB STANJE
|
||||
|
||||
```
|
||||
pgz_sport.klubovi (aktivnih): 1658
|
||||
pgz_sport.sportski_objekti: 106
|
||||
pgz_sport.form_templates: 15
|
||||
pgz_sport.savezi (aktivnih): 40-ish relevantnih PGŽ
|
||||
|
||||
Deaktivirano danas (non-sport): 23 organizacije
|
||||
- Rotary (2), Lions (1), Rotaract (1)
|
||||
- Kinološka društva (6)
|
||||
- Inovatori/Crnogorci (4)
|
||||
- Maketari/Brodomaketari (3)
|
||||
- Oldtimeri (5)
|
||||
- Izviđači (1)
|
||||
```
|
||||
|
||||
## KNOWLEDGE BASE STANJE
|
||||
|
||||
```
|
||||
Qdrant kolekcije (relevantne za sport):
|
||||
pgz_sport_v1: 9,xxx vektora
|
||||
pgz_godisnjaci: 4,999 vektora (godišnjaci ZSP PGZ 2006-2024)
|
||||
pgz_sport_dokumenti_v1: postoji
|
||||
legal_v2: postoji (zakoni)
|
||||
|
||||
dabi.knowledge kategorije:
|
||||
legal_deep_zakon: 71,612 facts
|
||||
legal_deep_pravilnik: 68,661 facts
|
||||
pgz_sport_online: 7 facts (scrape today)
|
||||
|
||||
legal.articles (DB): 309,819 rows
|
||||
|
||||
GAP: HOO pravilnici za sport NISU posebno scrapirani
|
||||
GAP: Godišnjaci su embeddani u Qdrant ali nisu u SQL structured tablicama
|
||||
```
|
||||
|
||||
## URL ROUTING
|
||||
|
||||
```
|
||||
Sad svaka stranica ima hash u URL-u:
|
||||
https://api.rinet.one/sport/#dashboard
|
||||
https://api.rinet.one/sport/#analytics
|
||||
https://api.rinet.one/sport/#objekti
|
||||
itd.
|
||||
|
||||
Implementirano: history.pushState + popstate handler
|
||||
```
|
||||
|
||||
## BROWSER GREŠKA (nije naša)
|
||||
|
||||
```
|
||||
"runtime.lastError: back/forward cache"
|
||||
→ Chrome extension greška (Grammarly/LastPass/slično)
|
||||
→ Apsolutno nema veze s portalom
|
||||
```
|
||||
|
||||
## PRIORITETI ZA SLJEDEĆU SESIJU
|
||||
|
||||
**P1 — HITAN (Damir je tražio, ne postoji):**
|
||||
- [ ] Matrix popunjenosti — rebuild iz bak.matrix.1777744755
|
||||
- [ ] Obrasci/predlošci — API + page (15 u DB)
|
||||
|
||||
**P2 — Važno:**
|
||||
- [ ] Dedup sportski objekti (ima duplikata — Kantrida ×4, Krimeja ×3...)
|
||||
- [ ] HOO pravilnici scraper
|
||||
- [ ] Strukturirani parse godišnjaka → SQL tablice
|
||||
|
||||
**P3 — Nice to have:**
|
||||
- [ ] Sport/grad normalizacija u dropdown-ima (mix case)
|
||||
- [ ] Koordinate (lat/lng) za objekte — većina null
|
||||
- [ ] ERP za klubove (member self-service)
|
||||
|
||||
## KLJUČNE DATOTEKE
|
||||
|
||||
```
|
||||
HTML: /opt/pgz-sport/static/index.html (7435 linija)
|
||||
Backend: /opt/pgz-sport/pgz_sport_api.py
|
||||
Router: /opt/pgz-sport/pgz_sport_v2_router.py (4300+ linija)
|
||||
Service: systemctl restart pgz-sport
|
||||
Log: journalctl -u pgz-sport -n 50 --no-pager
|
||||
Backups: /opt/pgz-sport/static/index.html.bak.*
|
||||
|
||||
DOBRI BACKUPI:
|
||||
.bak.rno — 407KB, 16:15, dobra baza (bez matrix, bez RNO/HNS pages)
|
||||
.bak.allfix.1777765254 — 408KB, 01:40, sve ispravne verzije stranica
|
||||
```
|
||||
|
||||
## NAPOMENA ZA SLJEDEĆI CLAUDE
|
||||
|
||||
Read before anything:
|
||||
1. /opt/ai-rinet/CLAUDE.md
|
||||
2. VRHOVNI_ZAKONI.md
|
||||
3. Ovaj file
|
||||
|
||||
3-STRIKE RULE AKTIVAN: sljedeća greška = manual mode.
|
||||
|
||||
**NIKAD ne diraj /opt/rinet/ (PROD) bez explicit approve.**
|
||||
Reference in New Issue
Block a user