mirror of
https://github.com/Dvorinka/MyClubServer.git
synced 2026-06-03 18:22:57 +00:00
168 lines
5.4 KiB
Markdown
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
|