# Fotbal Club – systém pro správu klubu Moderní systém pro správu fotbalového klubu postavený na Go (Gin, GORM, PostgreSQL) a Reactu (Chakra UI, React Router, React Query). ## ✨ Funkce - 🔐 Přihlášení pomocí JWT a role (admin/editor) - 📝 Články (blog) s kategoriemi, publikací, nahráváním obrázků - 🖼️ Bezpečné nahrávání souborů s kontrolou typu a velikosti - ⚽ Správa týmů a hráčů - 📅 Zápasy a tabulky s integrací FACR (cache, aliasy soutěží, override názvů/log) - 💼 Sponzoři a bannery - 📧 Kontaktní formulář s e‑mailovými notifikacemi - 🚀 REST API (připraveno pro Swagger) - 🐳 Docker pro snadný vývoj a nasazení - 🔄 Automatické migrace DB a seed dat - 🖥️ Moderní, responzivní frontend v češtině - 🍪 Lišta cookies s kategoriemi (nezbytné, preference, analytické, marketingové) ## 🚀 Rychlý start ### Předpoklady - [Docker](https://docs.docker.com/get-docker/) - [Docker Compose](https://docs.docker.com/compose/install/) ### Spuštění přes Docker 1) Klonujte repozitář: ```bash git clone cd fotbal-club ``` 2) Spusťte aplikaci: ```bash docker-compose up -d ``` Spustí se backend API, databáze PostgreSQL, proběhnou migrace a nastartuje frontend. 3) Přístup do aplikace: - Frontend: http://localhost:3000 - Backend API: http://localhost:8080 - Swagger (pokud povolíte): http://localhost:8080/swagger/index.html 4) První spuštění: - Otevřete http://localhost:3000 – budete přesměrováni na průvodce nastavením (vytvoření admin účtu, nastavení klubu a barev). ## 📂 Struktura projektu ``` fotbal-club/ ├── frontend/ # React frontend ├── internal/ # Backend │ ├── config/ # Konfigurace │ ├── controllers/ # HTTP kontrolery │ ├── middleware/ # Middleware (auth, admin) │ └── models/ # DB modely ├── pkg/ # Znovupoužitelné balíčky (logger, utils) ├── database/ # Migrace ├── uploads/ # Nahrané soubory ├── cache/ # Cache (prefetch) ├── static/ # Statická aktiva ├── docker-compose.yml # Docker Compose └── main.go # Vstupní bod aplikace ``` ## 🔧 Konfigurace Zkopírujte `.env.example` na `.env` a upravte: ```bash cp .env.example .env ``` Klíčové proměnné: - `JWT_SECRET` – tajný klíč pro JWT (změňte pro produkci) - `DATABASE_URL` – připojení na PostgreSQL - `UPLOAD_DIR` – cílová složka pro uploady (výchozí `./uploads`) - `MAX_UPLOAD_SIZE` – max. velikost souboru v bajtech - `ALLOWED_ORIGINS` – povolené originy pro CORS (čárkou oddělené) - `CONTACT_EMAIL`, `ADMIN_EMAIL`, `SMTP_*` – e‑mailová konfigurace Frontend (`frontend/.env`): - `REACT_APP_API_URL` – např. `http://localhost:8080/api/v1` - `REACT_APP_API_BASE_URL` – alternativa (bez `/api`), např. `http://localhost:8080` (frontend automaticky připojí `/api/v1`) - `REACT_APP_FACR_API_BASE_URL` – výchozí `http://localhost:8080/api/facr` - `REACT_APP_FACR_CACHE_TTL` – TTL cache v ms (výchozí 3600000) Poznámky k API URL na frontendu: - Pokud zadáte pouze origin (např. `REACT_APP_API_BASE_URL=http://localhost:8080`), klient `frontend/src/services/api.ts` automaticky doplní suffix `/api/v1`. - Při běhu přes Docker Compose se SPA vykresluje v prohlížeči hostitele. Proto musí být URL k backendu prohlížečem dosažitelná (použijte `http://localhost:8080`, nikoli název kontejneru jako `http://backend:8080`). ## 🛠 Lokální vývoj (bez Dockeru) 1) Závislosti backendu: ```bash go mod download ``` 2) Migrace a seed: ```bash make migrate make seed ``` 3) Backend: ```bash make run ``` 4) Frontend: ```bash cd frontend npm install npm start ``` ## 🔒 Bezpečnost a zásady - Backend přidává hlavičky (CSP, X-Content-Type-Options, X-Frame-Options, Referrer-Policy). - JWT token je očekáván v `Authorization: Bearer `. - Middleware `JWTAuth` ověřuje token, načte uživatele a ukládá do kontextu `user`, `userID`, `userRole` a `claims`. - Upload endpoint validuje MIME typy a velikost souboru; obrázky JPEG/PNG se komprimují. - Lišta cookies umožňuje volbu kategorií; rozhodnutí je uloženo v `localStorage` pod klíčem `cookie_consent` a vyvolá událost `cookie-consent-change`. ## 🧭 Frontend – hlavní části - Veřejné stránky: `Home`, `Blog`, `Článek`, `O klubu`, `Kalendář`, `Tabulky`, `Sponzoři`, `Kontakt`, právní stránky. - Admin: přístup přes `/admin` (chráněno), layout s postranním menu, hlavičkou a pomocníkem. - Na stránce `Admin Dashboard` je vložena komponenta `AdminHelp` s rychlými tipy. ## 🧪 Testování ```bash make test ``` Krytí: ```bash go test -coverprofile=coverage.out ./... && go tool cover -html=coverage.out ``` ## 🚀 Nasazení ### Build Docker image ```bash docker build -t fotbal-club . ``` ### Spuštění kontejneru ```bash docker run -d \ --name fotbal-club \ -p 8080:8080 \ --env-file .env \ fotbal-club ``` Nahrané soubory jsou servírovány z `/uploads` (viz `main.go`). ## 📚 API Základní přehled viz `DOCS/api.md`. Po zapnutí Swaggeru: - Swagger UI: http://localhost:8080/swagger/index.html - OpenAPI JSON: http://localhost:8080/swagger/doc.json ## 📖 Dokumentace Veškerá dokumentace projektu byla přesunuta do složky **`DOCS/`** pro lepší organizaci. **Hlavní dokumenty:** - **[DOCS/DOKUMENTACE.md](./DOCS/DOKUMENTACE.md)** - Kompletní česká dokumentace (100KB+) - **[DOCS/README.md](./DOCS/README.md)** - Index všech dokumentů s kategoriemi - **[DOCS/QUICK_START_10_10.md](./DOCS/QUICK_START_10_10.md)** - Rychlý start **Kategorie dokumentace:** - 🎨 MyUIbrix Visual Editor (Elementor) - ⚽ Sparta Elements (nové!) - 🗺️ Mapy a lokace - 🧭 Navigační systém - 📊 Analytika & tracking - 📰 Správa obsahu - 🎟️ Aktivity & události - ⚽ Zápasy & týmy - 📧 Newsletter - 📞 Kontakty - 🎨 Sponzoři & bannery - 📊 Ankety - 🔧 Admin & systém - 🚀 Performance & zabezpečení Více informací v **[DOCS/README.md](./DOCS/README.md)** ## 📄 Licence MIT – viz soubor [LICENSE](LICENSE).