HNS+UI: 4 nova endpointa + multi-sport schema (M2M kategorije + player_stats)

Endpoints:
- GET /api/v2/enrich-sources — sport→source mapping
- GET /api/v2/klubovi/priority-sort — financirani/godišnjak prvi
- GET /api/v2/clan/{id}/kategorije — many-to-many kategorije
- GET /api/v2/clan/{id}/full — kompletna slika (profil+kategorije+sezone+utakmice+stats)
- POST /api/v2/export/klubovi — XLSX export selektiranih

Schema:
- pgz_sport.clan_kategorije (M2M: igrač u juniorskoj+seniorskoj)
- pgz_sport.player_stats (multi-sport: nogomet/košarka/rukomet/odbojka/vaterpolo)
- pgz_sport.klub_roster (multi-source)
- pgz_sport.enrichment_sources (sport→izvor)
- View: v_pgz_priority_klubovi (financiran || u_godisnjaku)
- View: v_klubovi_priority_sort (priority sort)

Sport harvesters scaffold:
- scripts/sport_harvesters/__base.py (SportHarvester class)
- hks_basketball.py, hrs_handball.py, hos_volleyball.py, hvs_waterpolo.py
This commit is contained in:
2026-05-05 10:42:49 +02:00
parent c68fd4471e
commit 9fb512932a
10 changed files with 4765 additions and 0 deletions
+49
View File
@@ -0,0 +1,49 @@
#!/bin/bash
# sport_harvest_backup.sh — pre-cron pg_dump of harvest tables
# v1.0 — dradulic@outlook.com / damir@rinet.one — 2026-05-05
# Description: Backups 4 ključne pgz_sport tablice prije sport harvester cron cikla.
# Pokreće ga /etc/cron.d/sport-harvesters u 02:50 svaki 2. dan.
set -u
DSN_HOST="${RINET_DB_HOST:-10.10.0.2}"
DSN_PORT="${RINET_DB_PORT:-6432}"
DSN_DB="${RINET_DB_NAME:-rinet_v3}"
DSN_USER="${RINET_DB_USER:-rinet}"
DSN_PASS="${RINET_DB_PASS:-R1net2026!SecureDB#v7}"
BACKUP_DIR="/opt/pgz-sport/_backups"
LOG_DIR="/var/log/pgz-sport-debug"
DATE_TAG="$(date +%Y%m%d_%H%M)"
DATE_DAY="$(date +%Y%m%d)"
OUT_FILE="${BACKUP_DIR}/sport_harvest_pre_${DATE_TAG}.sql"
LOG_FILE="${LOG_DIR}/cron_backup_${DATE_DAY}.log"
mkdir -p "${BACKUP_DIR}" "${LOG_DIR}"
{
echo "[$(date -Is)] sport_harvest_backup START → ${OUT_FILE}"
PGPASSWORD="${DSN_PASS}" pg_dump \
-h "${DSN_HOST}" -p "${DSN_PORT}" -U "${DSN_USER}" -d "${DSN_DB}" \
--no-owner --no-privileges --data-only \
-t pgz_sport.clanovi \
-t pgz_sport.klub_roster \
-t pgz_sport.player_stats \
-t pgz_sport.clan_kategorije \
-f "${OUT_FILE}"
RC=$?
if [ "${RC}" -eq 0 ] && [ -s "${OUT_FILE}" ]; then
SIZE=$(stat -c%s "${OUT_FILE}")
echo "[$(date -Is)] OK rc=${RC} size=${SIZE}B"
else
echo "[$(date -Is)] FAIL rc=${RC} (file empty or pg_dump error)"
exit 1
fi
# Retencija: zadrži 14 dana
find "${BACKUP_DIR}" -maxdepth 1 -name 'sport_harvest_pre_*.sql' -mtime +14 -print -delete
echo "[$(date -Is)] retention swept (>14d)"
echo "[$(date -Is)] sport_harvest_backup DONE"
} >> "${LOG_FILE}" 2>&1