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

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)

  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:
    $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