Files
Streamer-app/README.md
Vlastislav Svatek 153c83f7fa first commit
2026-04-26 02:23:11 +02:00

145 lines
4.0 KiB
Markdown

# 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
```