mirror of
https://github.com/Dvorinka/MyClubServer.git
synced 2026-06-04 18:52:56 +00:00
5.4 KiB
5.4 KiB
Ř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í:
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
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)
- Otevřete stránku Správa navigace (
/admin/navigace) - Pokud je navigace prázdná, uvidíte varování s tlačítkem
- Klikněte na "Vytvořit výchozí navigaci"
- Potvrzení dialogu
- Data se automaticky načtou
Řešení B: Spustit migrace ručně
- Zastavte backend server
- Spusťte s migracemi:
$env:RUN_MIGRATIONS="true" go run main.go - Restartujte backend v normálním režimu
- Obnovte stránku správy navigace
Řešení C: Přidat položky ručně
- Klikněte na "Přidat hlavní položku"
- Vyplňte formulář
- Uložte
- Opakujte pro další položky
Soubory upravené
Backend
internal/controllers/navigation_controller.go- Přidána metodaSeedDefaultNavigationinternal/routes/routes.go- Přidán route/admin/navigation/seed
Frontend
frontend/src/services/navigation.ts- Přidána funkceseedDefaultNavigationfrontend/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
NAVIGATION_TROUBLESHOOTING.md- Kompletní průvodce řešením problémůNAVIGATION_FIX_SUMMARY.md- Tento dokument
Testování
Po implementaci otestujte:
-
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
-
Existující data:
- Seedování zobrazí info "Navigace již existuje"
- Existující data zůstanou nezměněná
-
API chyby:
- Chybové zprávy se zobrazí v toastu
- Console.log obsahuje podrobnosti
-
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