# NaughtyBulldogs — Streamer Rating App ## Rychlý start (Docker) ```bash # 1. Zkopíruj a edituj .env cp .env.example .env # 2. Vygeneruj bcrypt hash admin hesla docker compose run --rm app php -r "echo password_hash('tve_heslo', PASSWORD_BCRYPT);" # Zkopíruj výstup do .env jako ADMIN_HASH=... # 3. Spusť docker compose up -d # App běží na http://localhost:8080 ``` Při prvním startu entrypoint automaticky: - Počká na PostgreSQL (healthcheck) - Vytvoří tabulky a naseeduje všechny streamery ze schema.sql - Spustí Apache ```bash # Logy docker compose logs -f app # Restart docker compose restart app # Stop + smazání dat docker compose down -v ``` --- ## Stack - **Frontend**: Vanilla JS (single HTML file, no build step) - **Backend**: PHP 8.1+ - **Database**: PostgreSQL 14+ ## Struktura souborů ``` / ├── public/ │ └── index.html ← celý frontend ├── api/ │ ├── db.php ← PDO připojení + helpers (nepřístupné zvenčí) │ ├── auth.php ← login / logout / session check │ ├── streamers.php ← CRUD streamerů + hodnocení │ └── live.php ← live refresh (Twitch + Kick API) ├── config.php ← credentials (NIKDY do gitu!) ├── schema.sql ← PostgreSQL schéma + seed data ├── .htaccess ← routing + security headers └── .gitignore ``` ## Instalace ### 1. PostgreSQL databáze ```bash # Vytvoř databázi a uživatele psql -U postgres CREATE DATABASE streamers_db; CREATE USER streamers_user WITH ENCRYPTED PASSWORD 'silne_heslo'; GRANT ALL PRIVILEGES ON DATABASE streamers_db TO streamers_user; \q # Aplikuj schema psql -U streamers_user -d streamers_db -f schema.sql ``` ### 2. config.php ```bash cp config.php config.php # Edituj hodnoty: # - DB_HOST, DB_NAME, DB_USER, DB_PASS # - ADMIN_HASH — vygeneruj: php -r "echo password_hash('tve_heslo', PASSWORD_BCRYPT);" # - SESSION_SECRET — náhodný string min 32 znaků # - TWITCH_CLIENT_ID + TWITCH_CLIENT_SECRET (z https://dev.twitch.tv/console/apps) # - ALLOWED_ORIGIN — tvá doména ``` ### 3. Twitch API credentials 1. Jdi na https://dev.twitch.tv/console/apps 2. Vytvoř novou aplikaci 3. OAuth Redirect URL: `https://tvadomena.cz` 4. Zkopíruj **Client ID** a **Client Secret** do `config.php` ### 4. Nahrání na server ```bash # Nahraj všechny soubory kromě config.php (ten edituj přímo na serveru) rsync -av --exclude='config.php' ./ user@server:/var/www/streamers/ # Na serveru edituj config.php ssh user@server nano /var/www/streamers/config.php ``` ### 5. PHP session nastavení Ujisti se, že server má `session.cookie_httponly = On` a `session.cookie_secure = On` (pro HTTPS). ## API endpoints | Method | URL | Auth | Popis | |--------|-----|------|-------| | GET | `/api/streamers` | — | Veřejný seznam (jen ohodnocení) | | GET | `/api/streamers?all=1` | Admin | Všichni streamers | | POST | `/api/streamers` | — | Navrhnout streamera (divák) | | POST | `/api/streamers?admin=1` | Admin | Přidat streamera | | PUT | `/api/streamers?id=N` | Admin | Uložit hodnocení | | DELETE | `/api/streamers?id=N` | Admin | Smazat streamera | | GET | `/api/auth?action=check` | — | Zkontrolovat session | | POST | `/api/auth?action=login` | — | Přihlásit admin | | POST | `/api/auth?action=logout` | Admin | Odhlásit | | GET | `/api/live` | Admin | Refresh live statusů | ## Live refresh - Twitch: Helix API, batch po 100 streamerech — Přesný, spolehlivý - Kick: veřejný endpoint `kick.com/api/v2/channels/{name}` — funguje bez auth, ale může se změnit - Cache: výsledky jsou cachované 120s (nastavitelné v `config.php` jako `LIVE_CACHE_TTL`) - Refresh se spouští ručně tlačítkem v admin panelu (nebo cron job) ### Volitelný cron pro automatický refresh ```bash # Každé 3 minuty refreshuj live statusy (potřebuje admin session — doporučeno CLI script) */3 * * * * curl -s -b "PHPSESSID=..." https://tvadomena.cz/api/live > /dev/null ``` ## .gitignore ``` config.php /tmp/ *.log ```