Files
MyClub/DOCS/NAVIGATION_FIX_SUMMARY.md
T
Tomáš Dvořák 12cba639b9 upload
2025-10-16 13:32:05 +02:00

168 lines
5.4 KiB
Markdown

# Řešení problému s prázdnou navigací
## Problém
Stránka Správa navigace (`/admin/navigace`) nezobrazovala žádný obsah - ani webovou navigaci, ani admin panel, ani sociální sítě.
## Příčina
Databázové tabulky `navigation_items` a `social_links` existují (vytvořeny pomocí AutoMigrate), ale jsou prázdné. Výchozí data se vkládají pouze při spuštění migrací s příznakem `RUN_MIGRATIONS=true`, což uživatel pravděpodobně neudělal.
## Implementovaná řešení
### 1. Vylepšené diagnostické nástroje
#### Zobrazení stavu načtení dat
- Přidán informační panel zobrazující počet načtených položek:
- "Načteno: X webových, X admin, X sociálních"
- Tlačítko "Obnovit data" pro ruční refresh
#### Rozšířené logování
- Console.log výpisy pro sledování API odpovědí:
```javascript
console.log('Načtená navigace:', navData);
console.log('Načtené sociální odkazy:', socialData);
```
- Lepší zobrazení chybových zpráv s detaily z API
### 2. Prázdné stavy (Empty States)
Přidány pomocné zprávy pro každou záložku, když neobsahuje data:
#### Webová navigace
```
⚠ Žádné položky navigace
Nebyly nalezeny žádné položky navigace. Můžete vytvořit výchozí navigaci nebo přidat položky ručně.
[Vytvořit výchozí navigaci] [Přidat položku ručně]
```
#### Admin panel
```
⚠ Žádné vlastní položky v admin panelu
Použijte tlačítko "Přidat položku" pro vytvoření vlastní navigace.
```
#### Sociální sítě
```
⚠ Žádné sociální sítě
Nebyly nalezeny žádné odkazy na sociální sítě. Klikněte na "Přidat sociální síť" pro vytvoření odkazu.
```
### 3. Automatické seedování (Hlavní řešení)
#### Backend - Nový endpoint
**Soubor:** `internal/controllers/navigation_controller.go`
Přidána metoda `SeedDefaultNavigation`:
- Kontroluje, zda tabulka je prázdná
- Pokud je prázdná, vytvoří 12 výchozích navigačních položek:
- Domů, O klubu, Kalendář, Zápasy, Aktivity, Hráči, Tabulky, Články, Videa, Fotogalerie, Sponzoři, Kontakt
- Pokud již data existují, vrátí informaci a neudělá nic
- Endpoint: `POST /api/v1/admin/navigation/seed`
#### Frontend - Funkce a UI
**Soubor:** `frontend/src/services/navigation.ts`
```typescript
export const seedDefaultNavigation = async (): Promise<{
message: string;
count: number;
seeded: boolean;
}> => {
const response = await axios.post(`${API_BASE_URL}/admin/navigation/seed`, {}, {
withCredentials: true,
});
return response.data;
};
```
**Soubor:** `frontend/src/pages/admin/NavigationAdminPage.tsx`
- Přidána funkce `handleSeedDefaultNavigation`
- Tlačítko "Vytvořit výchozí navigaci" v prázdném stavu
- Zobrazí toast notifikaci s výsledkem
## Jak to použít
### Řešení A: Použít tlačítko v admin panelu (Doporučeno)
1. Otevřete stránku Správa navigace (`/admin/navigace`)
2. Pokud je navigace prázdná, uvidíte varování s tlačítkem
3. Klikněte na **"Vytvořit výchozí navigaci"**
4. Potvrzení dialogu
5. Data se automaticky načtou
### Řešení B: Spustit migrace ručně
1. Zastavte backend server
2. Spusťte s migracemi:
```powershell
$env:RUN_MIGRATIONS="true"
go run main.go
```
3. Restartujte backend v normálním režimu
4. Obnovte stránku správy navigace
### Řešení C: Přidat položky ručně
1. Klikněte na "Přidat hlavní položku"
2. Vyplňte formulář
3. Uložte
4. Opakujte pro další položky
## Soubory upravené
### Backend
1. `internal/controllers/navigation_controller.go` - Přidána metoda `SeedDefaultNavigation`
2. `internal/routes/routes.go` - Přidán route `/admin/navigation/seed`
### Frontend
1. `frontend/src/services/navigation.ts` - Přidána funkce `seedDefaultNavigation`
2. `frontend/src/pages/admin/NavigationAdminPage.tsx`:
- Přidáno zobrazení počtu načtených položek
- Přidány prázdné stavy s pomocnými zprávami
- Přidána funkce `handleSeedDefaultNavigation`
- Vylepšené error handling a logging
### Dokumentace
1. `NAVIGATION_TROUBLESHOOTING.md` - Kompletní průvodce řešením problémů
2. `NAVIGATION_FIX_SUMMARY.md` - Tento dokument
## Testování
Po implementaci otestujte:
1. **Prázdná databáze:**
- [ ] Zobrazí se varování "Žádné položky navigace"
- [ ] Tlačítko "Vytvořit výchozí navigaci" funguje
- [ ] Po seedování se zobrazí 12 položek
2. **Existující data:**
- [ ] Seedování zobrazí info "Navigace již existuje"
- [ ] Existující data zůstanou nezměněná
3. **API chyby:**
- [ ] Chybové zprávy se zobrazí v toastu
- [ ] Console.log obsahuje podrobnosti
4. **Všechny záložky:**
- [ ] Webová navigace - funguje
- [ ] Admin panel - funguje
- [ ] Sociální sítě - funguje
## Poznámky pro vývojáře
- Seed endpoint je **idempotentní** - lze jej volat vícekrát bez problémů
- Pokud databáze obsahuje byť jednu položku, seed neudělá nic
- Výchozí položky mají `requires_admin = false` (jsou pro veřejný web)
- Admin navigace musí být vytvořena ručně nebo pomocí samostatných seedů
- Všechny změny jsou zpětně kompatibilní
## Další vylepšení (volitelné)
V budoucnu lze přidat:
- [ ] Seed pro admin navigaci
- [ ] Seed pro sociální sítě (Facebook, Instagram, etc.)
- [ ] Import/export navigace do JSON
- [ ] Šablony navigace (sportovní klub, škola, firma, etc.)
- [ ] Duplikace položek navigace